AWAIT (Snowflake Scripting)

等待正在为 RESULTSET 运行的异步子作业,并在作业完成后返回。

AWAIT 是阻塞调用。可以使用 AWAIT 语句阻止其他代码运行,直到异步子作业完成并返回其结果。

备注

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

另请参阅:

CANCEL

语法

AWAIT <result_set_name> ;
Copy

其中:

result_set_name

RESULTSET 的名称。

使用说明

  • 为查询指定 ASYNC 关键字时,将为 RESULTSET 创建异步子作业。有关更多信息,请参阅 将查询分配给已声明的 RESULTSET

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

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

  • Snowflake Scripting 支持内置变量,您可以在存储过程的代码中使用它们。SQLID 变量可用于在异步子作业创建后立即为异步子作业指定的查询。

    所有其他内置变量在与异步子作业关联的 AWAIT 语句运行后填充。在 AWAIT 语句运行之前,这些变量具有 NULL 值。

    具体来说,在与异步子作业关联的 AWAIT 语句运行后,可以使用以下 用于异常处理的内置变量

    • SQLCODE

    • SQLERRM

    • SQLSTATE

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

    • SQLROWCOUNT

    • SQLFOUND

    • SQLNOTFOUND

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