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
相关产品推荐
相关产品推荐

