AWAIT (Snowflake Scripting)¶
等待所有正在运行的 异步子作业 完成,或等待为 RESULTSET 运行的特定异步子作业完成,然后分别在所有作业完成或特定作业完成后返回。
AWAIT 是阻塞调用。您可以使用 AWAIT 语句阻止其他代码运行,直到 AWAIT 调用完成。
备注
本 Snowflake Scripting 结构仅在 Snowflake Scripting 区块 内有效。
- 另请参阅:
语法¶
AWAIT { ALL | <result_set_name> };
其中:
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;
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;
等待正在运行的 RESULTSET 异步子作业完成:
AWAIT my_result_set;
有关更多示例,请参阅 使用异步子作业的示例。