HPL/SQL - EXECUTE 문

HPL/SQL - EXECUTE 문

EXECUTE(EXEC, EXECUTE IMMEDIATE) 문은 동적 SQL 문자열을 실행하고, 그 스칼라 결과를 로컬 변수에 담을 수 있어요. 동적 쿼리나 저장 프로시저 호출에 유용합니다.

출처: 문서

본문

EXECUTE (EXEC 또는 EXECUTE IMMEDIATE) 문은 동적 SQL 문을 실행하고 스칼라 결과를 로컬 변수로 반환할 수 있습니다. 이 문으로 저장 프로시저를 호출할 수도 있습니다.

구문(Syntax):

EXEC | EXECUTE | EXECUTE IMMEDIATE dynamic_sql_string [INTO var1, var2, ...];
|
EXEC | EXECUTE proc_name [parm1 = val1, ... ]

파라미터(Parameters): | Parameter | Type | Value | Description | |---|---|---|---| | dynamic_sql_string | VARCHAR | Variable or expression | 실행할 동적 SQL | | INTO var1, var2, … | Any | Variable | 값을 담을 변수(선택) |

참고(Notes):

  • 쿼리가 1개보다 많은 행을 반환하고 INTO 절이 지정되면, 할당에는 첫 행의 컬럼만 사용됩니다
  • 문이 1개 이상의 행을 반환하는데 INTO 절이 지정되지 않으면 결과 집합 데이터가 표준 출력으로 전송됩니다
  • EXEC, EXECUTE는 EXECUTE IMMEDIATE의 동의어입니다

예제(Example):

결과를 변수로 반환받기:

DECLARE cnt INT;
EXECUTE 'SELECT COUNT(*) FROM db.orders' INTO cnt;

DML 문 실행하기:

DECLARE tabname VARCHAR(100) DEFAULT 'tab1';
EXECUTE IMMEDIATE 'CREATE TABLE ' || tabname || ' (c1 INT)';

표준 출력으로 결과 출력하기:

EXEC 'SELECT ''A'', ''B'' FROM dual';

저장 프로시저 호출하기:

ALTER PROCEDURE spOrders
  @lim INT
AS
  DECLARE @cnt INT = 0
  SELECT @cnt = COUNT(*) from src LIMIT @lim
  IF @cnt > 0
    SELECT * FROM src
GO

EXEC spOrders @lim = 3

호환성(Compatibility): Oracle, IBM DB2 and Microsoft SQL Server.

더 알아보기 (Learn more)

EXECUTE는 런타임에 만들어진 SQL 문자열을 실행하는 동적 SQL 기능이에요. INTO로 단일 값을 변수에 받고, 결과 집합은 INTO 없이는 표준 출력으로 보여집니다. 저장 프로시저 호출에도 사용할 수 있습니다.