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

Snowflake中调用子存储过程时如何返回各子过程执行结果

解决方案

要让父存储过程返回每次调用子存储过程的执行结果,你需要修改Parent_Proc的逻辑,添加结果捕获与拼接的步骤,具体实现如下:

修改后的存储过程代码

CREATE OR REPLACE PROCEDURE Parent_Proc(process_tbl varchar, audit_tbl varchar, process_nm array)
returns varchar
as
declare
  COUNTER int default 1;
  tmp varchar;
  child_result varchar; -- 接收子存储过程的返回值
  final_result varchar default ''; -- 累积所有执行结果
begin
  while (COUNTER <= ARRAY_SIZE(process_nm)) do
    tmp := process_nm[COUNTER-1];
    -- 调用子存储过程并捕获返回值
    call Child_Proc(:process_tbl, :audit_tbl, :tmp) into :child_result;
    -- 按指定格式拼接当前执行结果
    final_result := final_result || tmp || ' return value of Child_Proc' || COUNTER || '-' || child_result || '\n';
    COUNTER := COUNTER + 1;
  end while;
  -- 返回最终拼接好的所有结果
  return final_result;
end;

关键修改说明

  • 新增child_result变量:通过CALL ... INTO ...语法捕获每次调用Child_Proc的返回值,确保能获取子过程的执行状态。
  • 新增final_result变量:用字符串拼接操作符||累积每条执行结果,格式完全匹配你需要的process_nm + 'return value of Child_ProcN-Failed/Succeeded'样式,每条结果用换行符\n分隔。
  • 循环结束后返回final_result:将所有子过程的执行结果一次性返回。

可选优化(返回结构化结果)

如果需要更易处理的结构化结果,可以改用数组存储每条记录,最后返回数组:

CREATE OR REPLACE PROCEDURE Parent_Proc(process_tbl varchar, audit_tbl varchar, process_nm array)
returns array
as
declare
  COUNTER int default 1;
  tmp varchar;
  child_result varchar;
  result_array array default []; -- 用数组存储结构化结果
begin
  while (COUNTER <= ARRAY_SIZE(process_nm)) do
    tmp := process_nm[COUNTER-1];
    call Child_Proc(:process_tbl, :audit_tbl, :tmp) into :child_result;
    -- 将当前结果封装为对象添加到数组
    array_append(result_array, object_construct(
      'process_name', tmp,
      'execution_result', 'Child_Proc' || COUNTER || '-' || child_result
    ));
    COUNTER := COUNTER + 1;
  end while;
  return result_array;
end;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:10:00