You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery异常处理仅抛单个错误:如何捕获多存储过程错误?

BigQuery中捕获多个存储过程异常的最优方案

当前代码的问题在于,外层BEGIN...EXCEPTION块会在proc1抛出异常时立即触发,导致proc2根本不会被执行,因此只能捕获到第一个错误。要同时收集两个存储过程的错误,需要为每个存储过程调用单独添加异常捕获逻辑,确保每个调用的错误都被记录,且后续调用不受影响。

以下是最优实现方案:

DECLARE error_list ARRAY<STRUCT<error_msg STRING, query STRING, stack_trace STRING>> DEFAULT [];

-- 调用proc1并独立捕获异常
BEGIN
  CALL my_project.proc1();
EXCEPTION WHEN ERROR THEN
  SET error_list = ARRAY_CONCAT(error_list, [STRUCT(
    @@error.message AS error_msg,
    @@error.statement_text AS query,
    @@error.formatted_stack_trace AS stack_trace
  )]);
END;

-- 调用proc2并独立捕获异常
BEGIN
  CALL my_project.proc2();
EXCEPTION WHEN ERROR THEN
  SET error_list = ARRAY_CONCAT(error_list, [STRUCT(
    @@error.message AS error_msg,
    @@error.statement_text AS query,
    @@error.formatted_stack_trace AS stack_trace
  )]);
END;

-- 输出所有捕获到的错误信息
SELECT * FROM UNNEST(error_list);

逻辑说明

  • 定义error_list数组变量,用于存储所有捕获到的错误信息,结构与原查询返回字段一致。
  • 为每个存储过程调用单独创建BEGIN...EXCEPTION块,确保单个存储过程报错不会中断后续调用。
  • 每个异常块将当前错误以结构体形式追加到error_list数组中。
  • 最后通过UNNEST展开数组,统一输出所有收集到的错误。

执行上述代码后,会同时返回proc1和proc2的两个除法错误信息。

内容的提问来源于stack exchange,提问作者Peter Yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 05:59:54