AWAIT (Snowflake Scripting)¶
Wartet auf die Beendigung aller laufenden asynchronen untergeordneten Jobs oder auf die Beendigung eines bestimmten asynchronen untergeordneten Jobs, der für ein RESULTSET läuft, und kehrt dann zurück, wenn alle Jobs bzw. der bestimmte Job beendet sind.
AWAIT ist ein blockierender Aufruf. Sie können eine AWAIT-Anweisung verwenden, um die Ausführung von anderem Code zu blockieren, bis der Aufruf von AWAIT abgeschlossen ist.
Bemerkung
Dieses Snowflake Scripting-Konstrukt ist nur innerhalb eines Snowflake Scripting-Blocks gültig.
- Siehe auch::
Syntax¶
AWAIT { ALL | <result_set_name> };
Wobei:
ALL
Die gespeicherte Prozedur wartet auf alle asynchronen untergeordneten Jobs, die vor dem Aufruf von AWAIT gestartet wurden.
result_set_name
Die gespeicherte Prozedur wartet darauf, dass der asynchrone untergeordnete Job, der für das angegebene RESULTSET läuft, beendet wird.
Nutzungshinweise¶
Ein asynchroner untergeordneter Job wird erstellt, wenn das Schlüsselwort ASYNC für eine Abfrage angegeben wird. Weitere Informationen dazu finden Sie unter Arbeiten mit asynchronen untergeordneten Aufträgen.
Wenn das Schlüsselwort ASYNC für eine Abfrage angegeben ist, kann die gespeicherte Prozedur nicht auf die Abfrageergebnisse zugreifen, bis eine AWAIT-Anweisung die Ergebnisse zurückgibt.
Wenn Sie einen asynchronen untergeordneten Job ausführen, wird „Fire-and-Forget“ nicht unterstützt. Wenn die gespeicherte Prozedur einen untergeordneten Job ausführt, der noch läuft, wenn die gespeicherte Prozedur beendet ist, wird der untergeordnete Job daher automatisch abgebrochen.
Snowflake Scripting unterstützt integrierte Variablen, die Sie im Code für gespeicherte Prozeduren verwenden können.
Diese Variablen verhalten sich bei asynchronen untergeordneten Jobs auf folgende Weise:
Die Variable SQLID ist für die Abfrage, die für einen asynchronen untergeordneten Job angegeben wurde, sofort nach der Erstellung des asynchronen untergeordneten Jobs verfügbar.
Die folgenden integrierten Variablen für die Behandlung von Ausnahmen sind verfügbar, nachdem die Anweisung AWAIT oder AWAIT ALL, die mit dem asynchronen untergeordneten Job verbunden ist, der den Fehler verursacht hat, ausgeführt wurde:
SQLCODE
SQLERRM
SQLSTATE
Wenn eine AWAIT ALL-Anweisung mit mehreren asynchronen untergeordneten Jobs verbunden ist, erfassen diese integrierten Variablen Informationen über den ersten fehlgeschlagenen asynchronen untergeordneten Job.
Die folgenden integrierten Variablen, die sich auf die Anzahl der Zeilen beziehen, die von DML-Befehlen betroffen sind, sind verfügbar, nachdem die AWAIT-Anweisung, die mit dem asynchronen untergeordneten Job verbunden ist, für ein RESULTSET ausgeführt wurde:
SQLROWCOUNT
SQLFOUND
SQLNOTFOUND
Diese Variablen sind nicht verfügbar, wenn eine AWAIT ALL-Anweisung ausgeführt wird.
Wenn ein asynchroner untergeordneter Job fehlschlägt, schlägt die mit dem asynchronen Job verbundene AWAIT- oder AWAIT ALL-Anweisung mit einem Fehler fehl und die Ausführung der gespeicherten Prozedur wird angehalten. Die folgende gespeicherte Prozedur schlägt zum Beispiel fehl und gibt einen Fehler zurück, wenn die Ausführung die AWAIT-Anweisung erreicht:
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.
Beispiele¶
Warten Sie, bis alle asynchronen untergeordneten Jobs abgeschlossen sind:
AWAIT ALL;
Warten Sie auf die Beendigung eines asynchronen untergeordneten Jobs, der für ein RESULTSET läuft:
AWAIT my_result_set;
Weitere Beispiele finden Sie unter Beispiele für die Verwendung asynchroner untergeordneter Aufträge.