EXECUTE IMMEDIATE

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

구문

EXECUTE IMMEDIATE '<string_literal>'
    [ USING (bind_variable_1 [, bind_variable_2 ...] ) ] ;

EXECUTE IMMEDIATE <variable>
    [ USING (bind_variable_1 [, bind_variable_2 ...] ) ] ;

EXECUTE IMMEDIATE $<session_variable>
    [ USING (bind_variable_1 [, bind_variable_2 ...] ) ] ;
Copy

여기서:

string_literal . variable . session_variable

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

  • 단일 SQL 문.

  • 저장 프로시저 호출.

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

  • 블록.

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

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 ORDER BY i);
        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