AWAIT (Snowflake Scripting)

等待所有正在运行的 异步子作业 完成,或等待为 RESULTSET 运行的特定异步子作业完成,然后分别在所有作业完成或特定作业完成后返回。

AWAIT 是阻塞调用。您可以使用 AWAIT 语句阻止其他代码运行,直到 AWAIT 调用完成。

备注

Snowflake Scripting 结构仅在 Snowflake Scripting 区块 内有效。

另请参阅:

CANCEL

语法

AWAIT { ALL | <result_set_name> };
Copy

其中:

ALL

存储过程会等待 AWAIT 调用前启动的所有异步子作业。

result_set_name

存储过程等待为指定 RESULTSET 运行的异步子作业完成。

使用说明

  • 为查询指定 ASYNC 关键字时,将创建异步子作业。有关更多信息,请参阅 处理异步子作业

  • 为查询指定 ASYNC 关键字时,存储过程无法访问查询结果,直到 AWAIT 语句返回结果。

  • 运行异步子作业时,不支持“触发并忘记”。因此,如果存储过程运行了在存储过程完成时仍在运行的子作业,则子作业将自动取消。

  • Snowflake Scripting 支持内置变量,您可以在存储过程的代码中使用它们。

    对于异步子作业,这些变量的行为方式如下:

    • SQLID 变量可用于在异步子作业创建后立即为异步子作业指定的查询。

    • 在与导致错误的异步子作业关联的 AWAIT 或 AWAIT ALL 语句运行后,可以使用以下 用于异常处理的内置变量

      • SQLCODE

      • SQLERRM

      • SQLSTATE

    • 与 RESULTSET 异步子作业关联的 AWAIT 语句运行后,还可以使用以下与 受 DML 命令影响的行数 相关的内置变量:

      • SQLROWCOUNT

      • SQLFOUND

      • SQLNOTFOUND

      这些变量在 AWAIT ALL 语句运行时不可用。

  • 如果异步子作业失败,与该异步作业关联的 AWAIT 或 AWAIT ALL 语句将失败并出现错误,存储过程的执行将停止。例如,以下存储过程在执行到达 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.
    

示例

等待所有异步子作业完成:

AWAIT ALL;
Copy

等待正在运行的 RESULTSET 异步子作业完成:

AWAIT my_result_set;
Copy

有关更多示例,请参阅 使用异步子作业的示例

语言: 中文