EXECUTE IMMEDIATE FROM

EXECUTE IMMEDIATE FROM은 스테이지의 파일에 지정된 SQL 문을 실행합니다. 이 파일에는 SQL 문 또는 Snowflake Scripting 블록 이 포함될 수 있습니다. 이러한 문은 구문상 올바른 SQL 문이어야 합니다.

EXECUTE IMMEDIATE FROM 명령을 사용하여 Snowflake 세션의 파일에 있는 문을 실행할 수 있습니다.

이 기능은 Snowflake 오브젝트 및 코드의 배포와 관리를 제어하는 메커니즘을 제공합니다. 예를 들어 저장된 스크립트를 실행하여 모든 계정에 대한 표준 Snowflake 환경을 만들 수 있습니다. 구성 스크립트에는 모든 새 계정에 대한 사용자, 역할, 데이터베이스, 스키마를 생성하는 문이 포함될 수 있습니다.

참고 항목:

EXECUTE IMMEDIATE

구문

EXECUTE IMMEDIATE
  FROM { absoluteFilePath | relativeFilePath }
Copy

여기서

absoluteFilePath ::=
   @[ <namespace>. ]<stage_name>/<path>/<filename>
Copy
relativeFilePath ::=
  '[ { ./ | / | { ../ [ , ../, ... ] } } ]<path>/<filename>'
Copy

절대 파일 경로(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 문이 포함될 수 있습니다.

    • 중첩된 EXECUTE IMMEDIATE FROM 문은 상대 파일 경로사용할 수 있습니다.

      상대 경로는 상위 파일의 스테이지와 파일 경로를 기준으로 평가됩니다. 상대 파일 경로가 / 로 시작하는 경우 경로는 상위 파일이 포함된 스테이지의 루트 디렉터리에서 시작됩니다.

      예는 기본 예 를 참조하십시오.

    • 상대 파일 경로는 작은따옴표(') 또는 $$ 로 묶어야 합니다.

    • 중첩된 파일의 최대 실행 깊이는 5입니다.

  • 절대 파일 경로를 작은따옴표(') 또는 $$ 로 묶는 것은 선택 사항입니다.

  • 실행할 파일의 크기가 10MB보다 크면 안 됩니다.

  • 실행할 파일은 UTF-8 로 인코딩해야 합니다.

  • 실행할 파일은 압축을 풀어야 합니다. PUT 명령을 사용하여 파일을 내부 스테이지에 업로드하는 경우 AUTO_COMPRESS 매개 변수 를 FALSE로 명시적으로 설정해야 합니다.

    예를 들어 my_file.sqlmy_stage 에 업로드하십시오.

    PUT file://~/sql/scripts/my_file.sql @my_stage/scripts/
      AUTO_COMPRESS=FALSE;
    
    Copy
  • 디렉터리의 모든 파일 실행은 지원되지 않습니다. 예를 들어, EXECUTE IMMEDIATE FROM @stage_name/scripts/ 는 오류를 발생시킵니다.

기본 예

이 예에서는 my_stage 스테이지에 있는 create-inventory.sql 파일을 실행합니다.

  1. 다음 문으로 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;
    
    Copy
  2. 다음 문으로 insert-inventory.sql 이라는 파일을 만듭니다.

    INSERT INTO my_inventory
      VALUES ('XYZ12345', 10.00),
             ('XYZ81974', 50.00),
             ('XYZ34985', 30.00),
             ('XYZ15324', 15.00);
    
    Copy
  3. 내부 스테이지 my_stage 를 만듭니다.

    CREATE STAGE my_stage;
    
    Copy
  4. 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;
    
    Copy
  5. my_stage 에 있는 create-inventory.sql 스크립트를 실행합니다.

    EXECUTE IMMEDIATE FROM @my_stage/scripts/create-inventory.sql;
    
    Copy

    반환 결과:

    +----------+-------+
    | SKU      | PRICE |
    |----------+-------|
    | XYZ81974 |    50 |
    | XYZ34985 |    30 |
    | XYZ15324 |    15 |
    | XYZ12345 |    10 |
    +----------+-------+