AWAIT (Exécution de scripts Snowflake)

Attend la fin de toutes les tâches enfants asynchrones en cours d’exécution ou la fin d’une tâche enfant spécifique en cours d’exécution pour un RESULTSET, puis revient lorsque toute les tâches sont terminées ou que la tâche spécifique est terminée, respectivement.

AWAIT est un appel bloquant. Vous pouvez utiliser une instruction AWAIT pour bloquer l’exécution d’autres codes jusqu’à ce que l’appel AWAIT soit terminé.

Note

Cette construction Exécution de scripts Snowflake n’est valable qu’à l’intérieur d’un bloc Exécution de scripts Snowflake.

Voir aussi ::

CANCEL

Syntaxe

AWAIT { ALL | <result_set_name> };
Copy

Où :

ALL

La procédure stockée attend toutes les tâches enfants asynchrones qui ont été lancées avant l’appel à AWAIT.

result_set_name

La procédure stockée attend la fin de la tâche enfant asynchrone en cours d’exécution pour l’adresse RESULTSET spécifiée.

Notes sur l’utilisation

  • Une tâche enfant asynchrone est créée lorsque le mot-clé ASYNC est spécifié pour la requête. Pour plus d’informations, voir Travailler avec des tâches enfants asynchrones.

  • Lorsque le mot-clé ASYNC est spécifié pour une requête, la procédure stockée ne peut pas accéder aux résultats de la requête tant qu’une instruction AWAIT ne renvoie pas les résultats.

  • Lorsque vous exécutez une tâche enfant asynchrone, la fonction « fire and forget » n’est pas prise en charge. Par conséquent, si la procédure stockée exécute une tâche enfant qui est toujours en cours d’exécution lorsque la procédure stockée se termine, la tâche enfant est automatiquement annulée.

  • Snowflake Scripting prend en charge les variables intégrées que vous pouvez utiliser dans le code pour les procédures stockées.

    Ces variables se comportent de la manière suivante pour les tâches enfants asynchrones :

    • La variable SQLID est disponible pour la requête spécifiée pour une tâche enfant asynchrone immédiatement après la création de la tâche enfant asynchrone.

    • Les variables intégrées suivantes pour la gestion des exceptions sont disponibles après l’exécution de l’instruction AWAIT ou AWAIT ALL associée à la tâche enfant asynchrone à l’origine de l’erreur :

      • SQLCODE

      • SQLERRM

      • SQLSTATE

      Lorsqu’une instruction AWAIT ALL est associée à plusieurs tâches enfants asynchrones, ces variables intégrées capturent des informations sur la première tâche enfant asynchrone qui échoue.

    • Les variables intégrées suivantes relatives au nombre de lignes affectées par les commandes DML sont disponibles après l’exécution de l’instruction AWAIT associée à la tâche enfant asynchrone pour un RESULTSET :

      • SQLROWCOUNT

      • SQLFOUND

      • SQLNOTFOUND

      Ces variables ne sont pas disponibles lorsqu’une instruction AWAIT ALL est exécutée.

  • Si une tâche enfant asynchrone échoue, l’instruction AWAIT ou AWAIT ALL associée à la tâche asynchrone échoue avec une erreur et l’exécution de la procédure stockée s’arrête. Par exemple, la procédure stockée suivante échoue et renvoie une erreur lorsque l’exécution atteint l’instruction AWAIT :

    BEGIN
      LET res RESULTSET := ASYNC (SELECT * FROM invalid_table);
      AWAIT res;
    END;
    
    Copy
    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.
    

Exemples

Attendez que toutes les tâches enfants asynchrones soient terminées :

AWAIT ALL;
Copy

Attendez la fin d’une tâche enfant asynchrone en cours d’exécution pour un RESULTSET :

AWAIT my_result_set;
Copy

Pour plus d’exemples, voir Exemples d’utilisation de tâches enfants asynchrones.