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 'SELECT PI()'; +-------------+ | PI() | |-------------| | 3.141592654 | +-------------+
이 예는 세션 변수에 정의된 문을 실행합니다.
SET stmt = $$ SELECT PI(); $$ ;EXECUTE IMMEDIATE $stmt; +-------------+ | PI() | |-------------| | 3.141592654 | +-------------+
이 예는 두 개의 로컬 변수에 정의된 문을 실행합니다. 이것은 또한 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; $$;CALL execute_immediate_local_variable(); +----------------------------------+ | EXECUTE_IMMEDIATE_LOCAL_VARIABLE | |----------------------------------| | 240 | +----------------------------------+
이 예에서는 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;참고: 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; $$ ;