EXECUTE IMMEDIATE FROM¶
EXECUTE IMMEDIATE FROM は、ステージ内のファイルで指定された SQL ステートメントを実行します。ファイルには SQL ステートメントまたは Snowflakeスクリプトブロック を含めることができます。ステートメントは構文的に正しい 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 ステートメントが含まれている必要があります。各ステートメントはコンマで区切る必要があります。
戻り値¶
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/
はエラーになります。
例¶
基本的な例¶
この例では、ステージ 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 | +----------+-------+