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 명령을 사용하는 예제입니다.

문자열 리터럴 실행하기

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

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

세션 변수에서 문 실행하기

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

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

변수가 포함된 문 실행하기

이 예제는 두 개의 지역성 변수에 정의된 문을 Snowflake Scripting 저장 프로시저에서 실행합니다. 이 예제는 또한 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

참고: Python Connector 코드에서 SnowSQL, Classic Console 또는 execute_stream 또는 execute_string 메서드를 사용하는 경우 이 예제를 대신 사용하십시오(SnowSQL, Classic Console 및 Python Connector에서 Snowflake Scripting 사용하기 참조).

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();
Copy
+----------------------------------+
| EXECUTE_IMMEDIATE_LOCAL_VARIABLE |
|----------------------------------|
| 240                              |
+----------------------------------+

익명 블록을 SnowSQL 또는 Classic Console에서 실행하기

SnowSQL 또는 Classic Console 에서 Snowflake Scripting 익명 블록을 실행하는 경우 블록을 문자열 리터럴(작은따옴표 또는 이중 달러 기호로 묶인)로 지정해야 하며, EXECUTE IMMEDIATE 명령에 블록을 전달해야 합니다. 자세한 내용은 SnowSQL, Classic Console 및 Python Connector에서 Snowflake Scripting 사용하기 섹션을 참조하십시오.

이 예제는 EXECUTE IMMEDIATE 명령으로 전달된 익명 블록을 실행합니다.

EXECUTE IMMEDIATE $$
DECLARE
  radius_of_circle FLOAT;
  area_of_circle FLOAT;
BEGIN
  radius_of_circle := 3;
  area_of_circle := PI() * radius_of_circle * radius_of_circle;
  RETURN area_of_circle;
END;
$$
;
Copy
+-----------------+
| anonymous block |
|-----------------|
|    28.274333882 |
+-----------------+

바인드 변수가 포함된 문 실행하기

이 예제에서는 EXECUTE IMMEDIATE를 사용하여 Snowflake Scripting 블록의 USING 매개 변수에 바인드 변수가 포함된 SELECT 문을 실행합니다. 먼저, 테이블을 만들고 데이터를 삽입합니다.

CREATE OR REPLACE TABLE invoices (id INTEGER, price NUMBER(12, 2));

INSERT INTO invoices (id, price) VALUES
  (1, 11.11),
  (2, 22.22);
Copy

이제 블록을 실행합니다.

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

참고: Python Connector 코드에서 SnowSQL, Classic Console 또는 execute_stream 또는 execute_string 메서드를 사용하는 경우 이 예제를 대신 사용하십시오(SnowSQL, Classic Console 및 Python Connector에서 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
+----+-------+
| ID | PRICE |
|----+-------|
|  2 | 22.22 |
+----+-------+