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> ... ] ) ]
필수 매개 변수¶
선택적 매개 변수¶
USING ( bind_variable [ , bind_variable ... ] )
커서의 쿼리 정의(예: WHERE 절에서)에 사용할 값을 보유하는 하나 이상의 바인드 변수를 지정합니다.
반환¶
EXECUTE IMMEDIATE는 실행된 문의 결과를 반환합니다. 예를 들어 문자열이나 변수에 SELECT 문이 포함된 경우 SELECT 문의 결과 세트가 반환됩니다.
사용법 노트¶
string_literal
,variable
또는session_variable
은 하나의 문만 포함해야 합니다. (블록 은 블록의 본문에 여러 문이 포함되어 있어도 하나의 문으로 간주됩니다.)session_variable
앞에는 달러 기호($
)가 있어야 합니다.로컬
variable
앞에는 달러 기호($
)가 오면 안 됩니다.
예¶
다음은 EXECUTE IMMEDIATE 명령을 사용하는 예제입니다.
문자열 리터럴 실행하기¶
이 예는 문자열 리터럴에 정의된 문을 실행합니다.
EXECUTE IMMEDIATE 'SELECT PI()';
+-------------+
| PI() |
|-------------|
| 3.141592654 |
+-------------+
세션 변수에서 문 실행하기¶
이 예는 세션 변수에 정의된 문을 실행합니다.
SET stmt =
$$
SELECT PI();
$$
;
EXECUTE IMMEDIATE $stmt;
+-------------+
| 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;
참고: 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;
$$;
CALL execute_immediate_local_variable();
+----------------------------------+
| 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;
$$
;
+-----------------+
| 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);
이제 블록을 실행합니다.
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;
참고: 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;
$$
;
+----+-------+
| ID | PRICE |
|----+-------|
| 2 | 22.22 |
+----+-------+