AWAIT (Snowflakeスクリプト)¶
RESULTSET のために実行中の非同期の子ジョブを待ち、ジョブが終了すると戻ります。
AWAIT はブロッキング呼び出しです。AWAIT ステートメントを使用すると、非同期の子ジョブが終了してその結果が返されるまで、他のコードの実行をブロックすることができます。
注釈
この Snowflakeスクリプト 構造は、 Snowflakeスクリプトブロック 内でのみ有効です。
- こちらもご覧ください:
構文¶
AWAIT <result_set_name> ;
条件:
result_set_name
RESULTSET の名前。
使用上の注意¶
クエリに ASYNC キーワードが指定されると、 RESULTSET に対して非同期の子ジョブが作成されます。詳細については、 宣言された RESULTSET へのクエリの割り当て をご参照ください。
クエリに ASYNC キーワードが指定されると、 RESULTSET に対する AWAIT ステートメントが結果を返すまで、ストアドプロシージャはクエリ結果にアクセスできません。
非同期の子ジョブを実行する場合、「fire and forget」(ファイアアンドフォーゲット)はサポートされません。したがって、ストアドプロシージャが完了したときにまだ実行中の子ジョブを実行すると、子ジョブは自動的にキャンセルされます。
Snowflake Scriptingは、ストアドプロシージャのコードで使用できる組み込み変数をサポートしています。 SQLID 変数は、非同期の子ジョブが作成された直後に、非同期の子ジョブに指定されたクエリで利用できるようになります。
他のすべての組み込み変数は、非同期の子ジョブに関連付けられた AWAIT ステートメントが実行された後に入力されます。AWAIT ステートメントを実行する前には、これらの変数に NULL 値があります。
具体的には、非同期の子ジョブに関連付けられた AWAIT ステートメントが実行された後、以下の 例外処理のための組み込み変数 が利用できるようになります。
SQLCODE
SQLERRM
SQLSTATE
DML コマンドによって影響を受ける行数 に関連する以下の組み込み変数も、非同期の子ジョブに関連する AWAIT ステートメントが実行された後に利用できるようになります。
SQLROWCOUNT
SQLFOUND
SQLNOTFOUND
非同期の子ジョブが失敗すると、非同期ジョブに関連付けられた AWAIT ステートメントがエラーで失敗し、ストアドプロシージャの実行が停止します。たとえば、以下のストアドプロシージャは実行が AWAIT ステートメントに達すると失敗し、エラーを返します。
BEGIN LET res RESULTSET := ASYNC (SELECT * FROM invalid_table); AWAIT res; END;
002003 (42S02): Uncaught exception of type 'STATEMENT_ERROR' on line 2 at position 4 : SQL compilation error: Table 'INVALID_TABLE' does not exist or not authorized.
例¶
AWAIT my_result_set;