EXECUTE IMMEDIATE FROM¶
EXECUTE IMMEDIATE FROM은 스테이지의 파일에 지정된 SQL 문을 실행합니다. 이 파일에는 SQL 문 또는 Snowflake Scripting 블록 이 포함될 수 있습니다. 이러한 문은 구문상 올바른 SQL 문이어야 합니다.
EXECUTE IMMEDIATE FROM 명령을 사용하여 Snowflake 세션의 파일에 있는 문을 실행할 수 있습니다.
이 기능은 Snowflake 오브젝트 및 코드의 배포와 관리를 제어하는 메커니즘을 제공합니다. 예를 들어 저장된 스크립트를 실행하여 모든 계정에 대한 표준 Snowflake 환경을 만들 수 있습니다. 구성 스크립트에는 모든 새 계정에 대한 사용자, 역할, 데이터베이스, 스키마를 생성하는 문이 포함될 수 있습니다.
- 참고 항목:
구문¶
EXECUTE IMMEDIATE
FROM { absoluteFilePath | relativeFilePath }
여기서
absoluteFilePath ::= @[ <namespace>. ]<stage_name>/<path>/<filename>relativeFilePath ::= '[ { ./ | / | { ../ [ , ../, ... ] } } ]<path>/<filename>'
절대 파일 경로(absoluteFilePath
)¶
namespace
database_name.schema_name
또는schema_name
형식의 내부 또는 외부 스테이지가 있는 데이터베이스 및/또는 스키마입니다. 데이터베이스와 스키마가 사용자 세션에 대해 현재 사용 중인 경우, 네임스페이스는 선택 사항 입니다. 그렇지 않은 경우, 필수입니다.stage_name
내부 또는 외부 스테이지의 이름입니다.
path
스테이지에 있는 파일의 경로이며 대/소문자를 구분합니다.
filename
실행할 파일의 이름입니다. 구문상 정확하고 유효한 SQL 문을 포함해야 합니다. 각 문은 세미콜론으로 구분해야 합니다.
상대 파일 경로(relativeFilePath
)¶
path
스테이지에 있는 파일의 상대 경로이며 대/소문자를 구분합니다. 상대 경로는 스테이지 파일 시스템의 루트를 나타내는 선행
/
, 현재 디렉터리(상위 파일이 있는 디렉터리)를 가리키는./
, 상위 디렉터리를 가리키는../
와 같이 확립된 규칙을 지원합니다. 자세한 내용은 사용법 노트 섹션을 참조하십시오.filename
실행할 파일의 이름입니다. 구문상 정확하고 유효한 SQL 문을 포함해야 합니다. 각 문은 세미콜론으로 구분해야 합니다.
반환¶
EXECUTE IMMEDIATE FROM은 다음을 반환합니다.
모든 문이 성공적으로 실행된 경우 파일에 있는 마지막 문의 결과입니다.
파일의 문이 실패한 경우에 나타나는 오류 메시지입니다.
파일의 문에 오류가 있으면 EXECUTE IMMEDIATE FROM 명령이 실패하고 실패한 문의 오류 메시지를 반환합니다.
참고
EXECUTE IMMEDIATE FROM 명령이 실패하고 오류 메시지를 반환하는 경우 파일에서 실패한 문 이전의 문은 모두 성공적으로 완료된 것입니다.
액세스 제어 요구 사항¶
EXECUTE IMMEDIATE FROM 명령을 실행하는 데 사용되는 역할 에는 파일이 있는 스테이지에 대한 USAGE(외부 스테이지) 또는 READ(내부 스테이지) 권한이 있어야 합니다.
파일을 실행하는 데 사용되는 역할은 권한이 있는 파일에 있는 문만 실행할 수 있습니다. 예를 들어 파일에 CREATE TABLE 문이 있는 경우 역할에는 계정에서 테이블을 생성하는 데 필요한 권한 이 있어야 하며, 그렇지 않으면 문이 실패합니다.
스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.
보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.
사용법 노트¶
실행할 파일의 SQL 문에는 EXECUTE IMMEDIATE FROM 문이 포함될 수 있습니다.
절대 파일 경로를 작은따옴표(
'
) 또는$$
로 묶는 것은 선택 사항입니다.실행할 파일의 크기가 10MB보다 크면 안 됩니다.
실행할 파일은 UTF-8 로 인코딩해야 합니다.
실행할 파일은 압축을 풀어야 합니다. PUT 명령을 사용하여 파일을 내부 스테이지에 업로드하는 경우 AUTO_COMPRESS 매개 변수 를 FALSE로 명시적으로 설정해야 합니다.
예를 들어
my_file.sql
을my_stage
에 업로드하십시오.PUT file://~/sql/scripts/my_file.sql @my_stage/scripts/ AUTO_COMPRESS=FALSE;
디렉터리의 모든 파일 실행은 지원되지 않습니다. 예를 들어,
EXECUTE IMMEDIATE FROM @stage_name/scripts/
는 오류를 발생시킵니다.
EXECUTE IMMEDIATE FROM 오류 문제 해결하기¶
이 섹션에는 EXECUTE IMMEDIATE FROM 문으로 인해 발생하는 몇 가지 일반적인 오류와 이를 해결하는 방법이 수록되어 있습니다.
파일 오류¶
오류 |
001501 (02000): File '<directory_name>' not found in stage '<stage_name>'.
|
---|---|
원인 |
이 오류의 원인은 여러 가지가 있습니다.
|
해결책 |
파일 이름을 확인하고 파일이 존재하는지 확인하십시오. 디렉터리의 모든 파일을 실행할 수는 없습니다. |
오류 |
001503 (42601): Relative file references like '<filename.sql>' cannot be used in top-level EXECUTE IMMEDIATE calls.
|
---|---|
원인 |
파일 실행 외부의 상대 파일 경로를 사용하여 문이 실행되었습니다. |
해결책 |
상대 파일 경로는 파일의 EXECUTE IMMEDIATE FROM 문에서만 사용할 수 있습니다. 파일의 절대 파일 경로 를 사용하십시오. 자세한 내용은 사용법 노트 섹션을 참조하십시오. |
오류 |
001003 (42000): SQL compilation error: syntax error line <n> at position <m> unexpected '<string>'.
|
---|---|
원인 |
파일에 SQL 구문 오류가 있습니다. |
해결책 |
파일의 구문 오류를 수정하고 파일을 스테이지에 다시 업로드하십시오. |
스테이지 오류¶
오류 |
002003 (02000): SQL compilation error: Stage '<stage_name>' does not exist or not authorized.
|
---|---|
원인 |
스테이지가 존재하지 않거나 스테이지에 대한 액세스 권한이 없습니다. |
해결책 |
|
액세스 제어 오류¶
오류 |
003001 (42501): Uncaught exception of type 'STATEMENT_ERROR' in file <file_name> on line <n> at position <m>:
SQL access control error: Insufficient privileges to operate on schema '<schema_name>'
|
---|---|
원인 |
문을 실행하는 데 사용된 역할에는 파일의 문 중 일부 또는 전체를 실행하는 데 필요한 권한이 없습니다. |
해결책 |
적절한 권한이 있는 역할을 사용하여 파일의 문을 실행하십시오. 자세한 내용은 액세스 제어 요구 사항 섹션을 참조하십시오. |
참고 항목: 스테이지 오류.
예¶
이 예에서는 my_stage
스테이지에 있는 create-inventory.sql
파일을 실행합니다.
다음 문으로
create-inventory.sql
이라는 파일을 만듭니다.CREATE OR REPLACE TABLE my_inventory( sku VARCHAR, price NUMBER ); EXECUTE IMMEDIATE FROM './insert-inventory.sql'; SELECT sku, price FROM my_inventory ORDER BY price DESC;
다음 문으로
insert-inventory.sql
이라는 파일을 만듭니다.INSERT INTO my_inventory VALUES ('XYZ12345', 10.00), ('XYZ81974', 50.00), ('XYZ34985', 30.00), ('XYZ15324', 15.00);
내부 스테이지
my_stage
를 만듭니다.CREATE STAGE my_stage;
PUT 명령을 사용하여 두 로컬 파일을 모두 스테이지에 업로드합니다.
PUT file://~/sql/scripts/create-inventory.sql @my_stage/scripts/ AUTO_COMPRESS=FALSE; PUT file://~/sql/scripts/insert-inventory.sql @my_stage/scripts/ AUTO_COMPRESS=FALSE;
my_stage
에 있는create-inventory.sql
스크립트를 실행합니다.EXECUTE IMMEDIATE FROM @my_stage/scripts/create-inventory.sql;
반환 결과:
+----------+-------+ | SKU | PRICE | |----------+-------| | XYZ81974 | 50 | | XYZ34985 | 30 | | XYZ15324 | 15 | | XYZ12345 | 10 | +----------+-------+