EXECUTE IMMEDIATE

SQL 문 또는 Snowflake Scripting 문 을 포함하는 문자열을 실행합니다.

구문

EXECUTE IMMEDIATE '<string_literal>'
    [ USING ( <bind_variable> [ , <bind_variable> ... ] ) ]

EXECUTE IMMEDIATE <variable>
    [ USING ( <bind_variable> [ , <bind_variable> ... ] ) ]

EXECUTE IMMEDIATE $<session_variable>
    [ USING ( <bind_variable> [ , <bind_variable> ... ] ) ]
Copy

필수 매개 변수

'string_literal' 또는 . variable 또는 . session_variable

문이 포함된 문자열 리터럴, Snowflake Scripting 변수 또는 세션 변수 입니다. 문은 다음 중 하나일 수 있습니다.

  • 단일 SQL 문

  • 저장 프로시저 호출

  • 제어 흐름 문(예: 루핑 또는 분기 문)

  • 블록

세션 변수를 사용하는 경우 문 길이는 세션 변수의 최대 크기(256바이트) 를 초과하지 않아야 합니다.

선택적 매개 변수

USING ( bind_variable [ , bind_variable ... ] )

커서의 쿼리 정의(예: WHERE 절에서)에 사용할 값을 보유하는 하나 이상의 바인드 변수를 지정합니다.

반환

EXECUTE IMMEDIATE는 실행된 문의 결과를 반환합니다. 예를 들어 문자열이나 변수에 SELECT 문이 포함된 경우 SELECT 문의 결과 세트가 반환됩니다.

사용법 노트

  • string_literal, variable 또는 session_variable 은 하나의 문만 포함해야 합니다. (블록 은 블록의 본문에 여러 문이 포함되어 있어도 하나의 문으로 간주됩니다.)

  • session_variable 앞에는 달러 기호($)가 있어야 합니다.

  • 로컬 variable 앞에는 달러 기호($)가 오면 됩니다.

기본 예

이 예는 문자열 리터럴에 정의된 문을 실행합니다.

EXECUTE IMMEDIATE 'SELECT PI()';
+-------------+
|        PI() |
|-------------|
| 3.141592654 |
+-------------+
Copy

이 예는 세션 변수에 정의된 문을 실행합니다.

SET stmt =
$$
    SELECT PI();
$$
;
Copy
EXECUTE IMMEDIATE $stmt;
+-------------+
|        PI() |
|-------------|
| 3.141592654 |
+-------------+
Copy

이 예는 두 개의 로컬 변수에 정의된 문을 실행합니다. 이것은 또한 EXECUTE IMMEDIATE가 문자열 리터럴에서 작동할 뿐만 아니라, 문자열(VARCHAR)로 평가되는 식에서도 작동함을 보여줍니다.

CREATE PROCEDURE execute_immediate_local_variable()
RETURNS VARCHAR
AS
 $$
     DECLARE
        v1 VARCHAR DEFAULT 'CREATE TABLE temporary1 (i INTEGER)';
        v2 VARCHAR DEFAULT 'INSERT INTO temporary1 (i) VALUES (76)';
        result INTEGER DEFAULT 0;
     BEGIN
        EXECUTE IMMEDIATE v1;
        EXECUTE IMMEDIATE v2  ||  ',(80)'  ||  ',(84)';
        result := (SELECT SUM(i) FROM temporary1);
        RETURN result::VARCHAR;
     END;
$$;
Copy
CALL execute_immediate_local_variable();
+----------------------------------+
| EXECUTE_IMMEDIATE_LOCAL_VARIABLE |
|----------------------------------|
| 240                              |
+----------------------------------+
Copy

이 예에서는 EXECUTE IMMEDIATE를 사용하여 바인드 매개 변수가 포함된 SELECT 문을 실행합니다.

DECLARE
  rs RESULTSET;
  query VARCHAR DEFAULT 'SELECT * FROM invoices WHERE price > ? AND price < ?';
  minimum_price NUMBER(12,2) DEFAULT 20.00;
  maximum_price NUMBER(12,2) DEFAULT 30.00;
BEGIN
  rs := (EXECUTE IMMEDIATE :query USING (minimum_price, maximum_price));
  RETURN TABLE(rs);
END;
Copy

참고: SnowSQL 또는 Classic Console 을 사용하는 경우 대신 다음 예를 사용하십시오(SnowSQL 및 Classic Console 에서 Snowflake Scripting 사용하기 참조).

EXECUTE IMMEDIATE $$
DECLARE
  rs RESULTSET;
  query VARCHAR DEFAULT 'SELECT * FROM invoices WHERE price > ? AND price < ?';
  minimum_price NUMBER(12,2) DEFAULT 20.00;
  maximum_price NUMBER(12,2) DEFAULT 30.00;
BEGIN
  rs := (EXECUTE IMMEDIATE :query USING (minimum_price, maximum_price));
  RETURN TABLE(rs);
END;
$$
;
Copy