DECLARE (Snowflakeスクリプト)¶
1つ以上のSnowflakeスクリプト変数、カーソル、RESULTSETs、ネストされたストアドプロシージャ、または例外を宣言します。
詳細については、次のトピックをご参照ください。
- こちらもご参照ください:
構文¶
DECLARE
{ <variable_declaration>
| <cursor_declaration>
| <resultset_declaration>
| <nested_stored_procedure_declaration>
| <exception_declaration> };
[
{ <variable_declaration>
| <cursor_declaration>
| <resultset_declaration>
| <nested_stored_procedure_declaration>
| <exception_declaration> };
...
]
次のセクションでは、各タイプの宣言の構文について詳しく説明します。
変数宣言構文¶
次の構文を使用して、変数 を宣言します。
<variable_declaration> ::=
<variable_name> [<type>] [ { DEFAULT | := } <expression>]
条件:
例:
profit NUMBER(38, 2) := 0;
包括的な例については、 例 をご参照ください。
変数の詳細については、 変数の操作 をご参照ください。
カーソル宣言構文¶
次の構文を使用して、カーソル を宣言します。
<cursor_declaration> ::=
<cursor_name> CURSOR FOR <query>
条件:
cursor_name
カーソルに付ける名前。これは、このブロックでまだ使用されていない有効なSnowflake 識別子 であればどれでもかまいません。識別子は、
FETCH
などの他のカーソル関連コマンドで使用されます。query
カーソルが反復する、結果セットを定義するクエリ。
これは、有効な SELECT ステートメントの大半に当てはまります。SELECT ステートメントでバインドパラメーターを指定するには、疑問符(
?
)を使用します。カーソルを開くときにパラメーターをバインドして、USING 句の変数をバインドできます。
例:
c1 CURSOR FOR SELECT id, price FROM invoices;
カーソル(包括的な例を含む)の詳細については、 カーソルの操作 をご参照ください。
RESULTSET 宣言構文¶
次の構文を使用して、RESULTSET を宣言します。
<resultset_name> RESULTSET [ { DEFAULT | := } [ ASYNC ] ( <query> ) ] ;
条件:
resultset_name
RESULTSET に付ける名前。
名前は、現在のスコープ内で一意である必要があります。
名前は、 オブジェクト識別子 の名前付け規則に従う必要があります。
ASYNC
クエリを 非同期の子ジョブ として実行します。
クエリには、 SELECT ステートメントや DML ステートメント(INSERT や UPDATE など)を含む、有効な SQL ステートメントを指定できます。
このキーワードを省略すると、ストアドプロシージャは子ジョブを順次実行し、各子ジョブは実行中の子ジョブの終了を待ってから開始します。
このキーワードを使用すると、複数の子ジョブを同時に実行できるため、効率が向上し、全体の実行時間が短縮されます。
DEFAULT query
または .:= query
query
の値を RESULTSET に割り当てます。
例:
res RESULTSET DEFAULT (SELECT col1 FROM mytable ORDER BY col1);
RESULTSETs (包括的な例を含む)の詳細については、 RESULTSETs の操作 をご参照ください。
ネストされたストアドプロシージャ宣言構文¶
次の構文を使用して、ネストされたストアドプロシージャ を宣言します。
<nested_procedure_name> PROCEDURE (
[ <arg_name> <arg_data_type> ] [ , ... ] )
RETURNS { <result_data_type> | TABLE ( [ <col_name> <col_data_type> [ , ... ] ] ) }
AS <nested_procedure_definition>
条件:
nested_procedure_name
ネストされたストアドプロシージャの名前。名前は、 オブジェクト識別子 の名前付け規則に従う必要があります。
( [ arg_name arg_data_type ] [ , ... ] )
ネストされたストアドプロシージャの入力引数を指定します。
arg_name
には、入力引数の名前を指定します。arg_data_type
には、:doc:` SQL データ型 </sql-reference-data-types>` を指定します。
RETURNS { result_data_type | TABLE ( [ col_name col_data_type [ , ... ] ] ) }
ストアドプロシージャによって返される結果の型を指定します。現在、NOT NULL は、ネストされたストアドプロシージャの RETURNS パラメーターではサポートされていません。
RETURNS result_data_type
には、:doc:` SQL データ型 </sql-reference-data-types>` を指定します。返されたテーブルの列の Snowflakeデータ型 がわかっている場合、
RETURNS TABLE ( [ col_name col_data_type [ , ... ] ] )
には、列名と型を指定します。RETURNS TABLE (sales_date DATE, quantity NUMBER)
それ以外の場合(例: 実行時に列型を決定する場合)は、列名と型を省略できます。
RETURNS TABLE ()
注釈
現在、
RETURNS TABLE(...)
句では、 GEOGRAPHY を列タイプとして指定することはできません。これは、ストアドプロシージャまたは匿名プロシージャを作成する場合に適用されます。CREATE OR REPLACE PROCEDURE test_return_geography_table_1() RETURNS TABLE(g GEOGRAPHY) ...
WITH test_return_geography_table_1() AS PROCEDURE RETURNS TABLE(g GEOGRAPHY) ... CALL test_return_geography_table_1();
列タイプとして GEOGRAPHY を指定しようとすると、ストアドプロシージャの呼び出しはエラーになります。
Stored procedure execution error: data type of returned table does not match expected returned table type
この問題を回避するには、
RETURNS TABLE()
の列の引数と型を省略します。CREATE OR REPLACE PROCEDURE test_return_geography_table_1() RETURNS TABLE() ...
WITH test_return_geography_table_1() AS PROCEDURE RETURNS TABLE() ... CALL test_return_geography_table_1();
AS nested_procedure_definition
ネストされたストアドプロシージャによって実行されるコードを定義します。定義は、任意の有効なコードで構成できます。
例外宣言構文¶
次の構文を使用して、例外 を宣言します。
<exception_name> EXCEPTION [ ( <exception_number> , '<exception_message>' ) ] ;
条件:
exception_name
例外に付ける名前。
exception_number
例外を一意に識別するための番号。数値は-20000と-20999の間の整数でなければなりません。この番号は、同時に存在する他の例外には使用しないでください。
デフォルト: -20000
exception_message
例外を説明するメッセージ。メッセージには二重引用符を含めることはできません。
デフォルト: 空の文字列。
例:
exception_could_not_create_table EXCEPTION (-20003, 'ERROR: Could not create table.');
例外(包括的な例を含む)の詳細については、 処理の例外 をご参照ください。
例¶
この例では、Snowflake Scriptingの匿名ブロックで使用する profit
という名前の変数を宣言します。
DECLARE
profit number(38, 2) DEFAULT 0.0;
BEGIN
LET cost number(38, 2) := 100.0;
LET revenue number(38, 2) DEFAULT 110.0;
profit := revenue - cost;
RETURN profit;
END;
注意:Snowflake CLI、 SnowSQL、 Classic Console、 execute_stream
、 execute_string
メソッドを Python Connector コードで使用する場合は、代わりにこの例を使用してください(Snowflake CLI、 SnowSQL、 Classic Console、Python ConnectorでSnowflake Scriptingを使用する を参照)。
EXECUTE IMMEDIATE
$$
DECLARE
profit number(38, 2) DEFAULT 0.0;
BEGIN
LET cost number(38, 2) := 100.0;
LET revenue number(38, 2) DEFAULT 110.0;
profit := revenue - cost;
RETURN profit;
END;
$$
;
変数、カーソル、RESULTSETs、例外を宣言する例については、以下のトピックをご参照ください。