Table Function vs Procedure — 언제 SELECT, 언제 CALL? #shorts #SAP #HANA

Moderator · 조회 3

HANA에서 Table Function vs Procedure 선택 기준

HANA 개발 시 Table FunctionStored Procedure 중 어떤 걸 써야 할지 헷갈린다면, 딱 한 가지 기준만 기억하세요: 결과를 SELECT로 바로 읽을 수 있는가입니다.

Table Function — SELECT로 호출

Table Function은 반환값이 TABLE 타입이라 다른 쿼리에서 직접 JOIN하거나 WHERE 절에 넣을 수 있습니다.

-- Table Function 정의
CREATE FUNCTION GET_SALES(IN YEAR INT)
RETURNS TABLE (REGION VARCHAR(50), AMT DECIMAL(10,2))
LANGUAGE SQLSCRIPT AS BEGIN
  RETURN SELECT REGION, SUM(AMOUNT) AS AMT
         FROM SALES WHERE YEAR(DATE) = :YEAR
         GROUP BY REGION;
END;

-- 호출: 그냥 SELECT
SELECT * FROM GET_SALES(2024) WHERE AMT > 1000000;

Procedure — CALL로 실행

Procedure는 INSERT/UPDATE/DELETE 같은 DML이 필요하거나, 여러 결과 집합을 한 번에 반환해야 할 때 씁니다. SELECT로 바로 읽을 수 없고 CALL 문이 필요합니다.

-- Procedure 정의
CREATE PROCEDURE CLOSE_MONTH(IN MONTH INT,
  OUT RESULT_CNT INT)
LANGUAGE SQLSCRIPT AS BEGIN
  UPDATE ORDERS SET STATUS = 'CLOSED'
  WHERE MONTH(ORDER_DATE) = :MONTH;
  RESULT_CNT := ::ROWCOUNT;
END;

-- 호출: CALL 필수
CALL CLOSE_MONTH(12, ?);

선택 기준 요약

읽기 전용 + 다른 쿼리에서 JOIN 필요 → Table Function
쓰기(DML) 포함 + 복잡한 트랜잭션 → Procedure
성능 최적화 측면에서 Table Function이 옵티마이저 활용에 유리합니다.

핵심 한 줄

결과를 SELECT로 바로 쓰면 Table Function, DML이 필요하면 Procedure.