Snowflakeスクリプトのブロックを理解する¶
Snowflakeスクリプトでは、Snowflakeスクリプトのブロック内に手続き型コードを記述します。このトピックでは、手続き型コードをブロックに記述する方法について説明します。
ブロックの構造を理解する¶
ブロックの基本構造は次のとおりです。
ブロックは、キーワードで区切られた必須セクションとオプションセクションで構成されます。各セクションは異なる目的を果たします。
DECLARE: ブロックで変数、カーソル、 RESULTSETs、または例外を使用する必要がある場合は、ブロックの DECLARE セクションまたはブロックの BEGIN ... END セクションで、これらを宣言できます。
次のように宣言できます。
ブロックのこのセクションはオプションです。
BEGIN ... END: BEGIN と END の間におけるブロックのセクションに、 SQL ステートメントとSnowflakeスクリプト構造を記述します。
EXCEPTION: 例外処理コードを追加する必要がある場合は、これをブロックの EXCEPTION セクションに追加します。
ブロックのこのセクションはオプションです。
単純なブロックには、キーワード BEGIN と END のみが必要です。例:
重要
ブロックを開始するキーワード BEGIN は、トランザクションを開始するキーワード BEGIN とは異なります。混乱を最小限に抑えるために、Snowflakeは、 BEGIN ではなく、 BEGIN TRANSACTION (または古い形式の BEGIN WORK)でトランザクションを開始することを強くお勧めします。
ブロック内に作成したデータベースオブジェクト(例: 上記の例のテーブル)は、ブロック外で使用できます。
コードで変数を使用している場合は、ブロック内で それらの変数を宣言する ことができます。これを実行する1つの方法は、ブロックの DECLARE セクションにあります。例:
この例では、変数を宣言し、変数を使用して、変数の値を返します。ブロックから値が返される方法の詳細については、 値を返す をご参照ください。
これらの変数は、ブロック外では使用できません。宣言の範囲を理解する をご参照ください。
LET を使用して、ブロックの BEGIN ... END セクションで変数を宣言することもできます。詳細については、 変数の宣言 をご参照ください。
ストアドプロシージャでのブロックの使用¶
ストアドプロシージャの定義でブロックを使用できます。Snowsight で実行して、Snowflakeスクリプトのブロックを含むストアドプロシージャを作成できる例を次に示します。
Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the
execute_stream or execute_string method in Python Connector
code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):
CALL コマンドを使用して、ストアドプロシージャを呼び出すことができます。次の例では、前の例のストアドプロシージャ area を呼び出します。
ストアドプロシージャは次の出力を返します。
詳細については、 Snowflakeスクリプトでのストアドプロシージャの記述 をご参照ください。
ユーザー定義関数でブロックを使用する(UDF)¶
SnowflakeスクリプトUDFの定義でブロックを使用できます。次の例は、Snowsight で実行して、Snowflakeスクリプトのブロックを含むUDFを作成できるコードを示します。
Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the
execute_stream or execute_string method in Python Connector
code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):
SELECT または INSERT ステートメントなどのSQLステートメントで関数を呼び出すことができます。次の例は、前の例のSnowflakeスクリプトUDF``area``をSELECT ステートメントで呼び出します。
詳細については、 Snowflakeスクリプト UDFs をご参照ください。
匿名ブロックの使用¶
ストアドプロシージャまたはUDF の外部で手続き型コードを実行する場合、匿名ブロック を定義して使用することができます。匿名ブロックは、ストアドプロシージャまたはUDFの一部ではないブロックです。ブロックを個別のスタンドアロン SQL ステートメントとして定義します。
ブロックを定義する BEGIN ステートメントもブロックを実行します。(ブロックを実行するために別の CALL コマンドを実行することはありません。)
Snowsight で実行できる匿名ブロックの例を次に示します。
Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the
execute_stream or execute_string method in Python Connector
code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):
この例では、次の出力が生成されます。
出力の列ヘッダーは anonymous block です。コードがストアドプロシージャで実行された場合、列ヘッダーはストアドプロシージャの名前になります。
次の例では、関連する2つのテーブルを作成する匿名ブロックを定義します。この例では、手続き型コードのブロックは変数を使用する必要がないため、ブロックの DECLARE セクションは省略されています。
Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the
execute_stream or execute_string method in Python Connector
code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):