AWAIT (Script Snowflake)

Aguarda que todos os trabalhos filhos assíncronos que estão em execução terminem ou que um trabalho filho assíncrono específico que está em execução para um RESULTSET termine e, em seguida, retorna quando todos os trabalhos tiverem terminado ou quando o trabalho específico tiver terminado, respectivamente.

AWAIT é uma chamada de bloqueio. Você pode usar uma instrução AWAIT para bloquear a execução de outro código até que a chamada AWAIT seja concluída.

Nota

Este constructo do Script Snowflake só é válido dentro de um bloco do Script Snowflake.

Consulte também:

CANCEL

Sintaxe

AWAIT { ALL | <result_set_name> };
Copy

Onde:

ALL

O procedimento armazenado aguarda todos os trabalhos filhos assíncronos que foram iniciados antes da chamada AWAIT.

result_set_name

O procedimento armazenado aguarda a conclusão do trabalho filho assíncrono que está sendo executado para o RESULTSET especificado.

Notas de uso

  • Um trabalho filho assíncrono é criado quando a palavra-chave ASYNC é especificada para uma consulta. Para obter mais informações, consulte Trabalhar com trabalhos secundários assíncronos.

  • Quando a palavra-chave ASYNC é especificada para uma consulta, o procedimento armazenado não pode acessar os resultados de consulta até que uma instrução AWAIT retorne os resultados.

  • Ao executar um trabalho filho assíncrono, não há suporte para «disparar e esquecer». Portanto, se o procedimento armazenado executar um trabalho filho que ainda esteja em execução quando o procedimento armazenado for concluído, o trabalho filho será cancelado automaticamente.

  • O Snowflake Scripting oferece suporte a variáveis internas que podem ser usadas no código para procedimentos armazenados.

    Essas variáveis se comportam das seguintes maneiras em trabalhos filhos assíncronos:

    • A variável SQLID fica disponível para a consulta especificada para um trabalho filho assíncrono imediatamente após a criação do trabalho filho assíncrono.

    • As seguintes variáveis internas para tratamento de exceções estão disponíveis após a execução da instrução AWAIT ou AWAIT ALL associada ao trabalho filho assíncrono que causou o erro:

      • SQLCODE

      • SQLERRM

      • SQLSTATE

      Quando uma instrução AWAIT ALL está associada a vários trabalhos filhos assíncronos, essas variáveis incorporadas capturam informações sobre o primeiro trabalho filho assíncrono com falha.

    • As seguintes variáveis internas relacionadas ao número de linhas afetadas pelos comandos DML estão disponíveis após a execução da instrução AWAIT associada ao trabalho filho assíncrono de um RESULTSET:

      • SQLROWCOUNT

      • SQLFOUND

      • SQLNOTFOUND

      Essas variáveis não estão disponíveis quando uma instrução AWAIT ALL é executada.

  • Se um trabalho filho assíncrono falhar, a instrução AWAIT ou AWAIT ALL associada ao trabalho assíncrono falhará com um erro e a execução do procedimento armazenado será interrompida. Por exemplo, o procedimento armazenado a seguir falha e retorna um erro quando a execução atinge a instrução 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.
    

Exemplos

Aguardar a conclusão de todos os trabalhos filhos assíncronos:

AWAIT ALL;
Copy

Aguarde a conclusão de um trabalho filho assíncrono que está sendo executado para RESULTSET:

AWAIT my_result_set;
Copy

Para obter mais exemplos, consulte Exemplos de uso de trabalhos secundários assíncronos.