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 ...] ) ] ;
여기서:
반환¶
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 ORDER BY i); 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; $$ ;