AWAIT (Snowflakeスクリプト)¶
実行中のすべての 非同期の子ジョブ 終了するか、または RESULTSET に対して実行中の特定の非同期の子ジョブが終了するまで待機し、すべてのジョブが終了したとき、または特定のジョブが終了したときにそれぞれ戻ります。
AWAIT はブロッキング呼び出しです。AWAIT ステートメントを使用すると、 AWAIT の呼び出しが完了するまで、他のコードの実行をブロックすることができます。
注釈
この Snowflakeスクリプト 構造は、 Snowflakeスクリプトブロック 内でのみ有効です。
- こちらもご覧ください:
構文¶
AWAIT { ALL | <result_set_name> };
条件:
ALL
ストアドプロシージャは、 AWAIT 呼び出しの前に開始されたすべての非同期の子ジョブが完了するのを待機します。
result_set_name
ストアドプロシージャは、指定された RESULTSET に対して実行中の非同期の子ジョブが終了するまで待機します。
使用上の注意¶
クエリに ASYNC キーワードが指定されると、非同期の子ジョブが作成されます。詳細については、 非同期子ジョブの操作 をご参照ください。
クエリに ASYNC キーワードが指定されている場合、 AWAIT ステートメントが結果を返すまで、ストアドプロシージャはクエリ結果にアクセスできません。
非同期の子ジョブを実行する場合、「fire and forget」(ファイアアンドフォーゲット)はサポートされません。したがって、ストアドプロシージャが完了したときにまだ実行中の子ジョブを実行すると、子ジョブは自動的にキャンセルされます。
Snowflake Scriptingは、ストアドプロシージャのコードで使用できる組み込み変数をサポートしています。
これらの変数は、非同期の子ジョブでは以下のように動作します。
SQLID 変数は、非同期の子ジョブが作成された直後に、非同期の子ジョブに指定されたクエリで利用できるようになります。
エラーの原因となった非同期の子ジョブに関連付けられた AWAIT または AWAIT ALL ステートメントが実行された後、以下の 例外処理の組み込み変数 を利用できます。
SQLCODE
SQLERRM
SQLSTATE
AWAIT ALL ステートメントが複数の非同期の子ジョブに関連付けられている場合、これらの組み込み変数は、最初に失敗した非同期の子ジョブの情報を取得します。
DML コマンドによって影響を受ける行数 に関連する以下の組み込み変数は、 RESULTSET 実行のための非同期の子ジョブに関連する AWAIT ステートメントの後に利用可能です。
SQLROWCOUNT
SQLFOUND
SQLNOTFOUND
これらの変数は、 AWAIT ALL ステートメントが実行されているときには利用できません。
非同期の子ジョブが失敗すると、非同期ジョブに関連付けられた AWAIT または AWAIT ALL ステートメントがエラーで失敗し、ストアドプロシージャの実行が停止します。たとえば、以下のストアドプロシージャは実行が 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 ALL;
RESULTSET を実行している非同期の子ジョブが完了するまで待機します。
AWAIT my_result_set;
その他の例については、 非同期子ジョブの使用例 をご参照ください。