我有 3 个存储过程。我有一个编排存储过程,其中包含带有 try catch block 的错误处理程序。在每个 catch block 中,我已将自定义错误记录到日志表中以记录错误,然后调用 return()
退出。
但是当我从编排存储过程调用这 3 个存储过程时,如果抛出任何错误/异常,它会记录下来,然后从该存储过程退出。然后它开始执行下一个存储过程。
但就我而言,如果编排存储过程中的任何一个存储过程引发任何异常,我希望它退出并停止执行下一个过程。然后它应该退出 ORCH_SP。
我怎样才能实现这个目标?
CREATE OR REPLACE PROCEDURE ORCH_SP()
RETURN VARCHAR LANGUAGUE JAVASCRIPT
AS $$ {
P1();
P2();
P3();
} $$;
最佳答案
如何将 try/catch block 引入 ORCH_SP() 并检查每个子 SP 调用的返回值,以确定是否在生成错误时重新引发错误(并退出) - 或者继续调用接下来的SP...下面是一个简化的例子来粗略地说明该方法:
CREATE OR REPLACE PROCEDURE ORCH_SP()
RETURNS VARCHAR LANGUAGE JAVASCRIPT
AS $$ {
var return_msg = "";
try {
var sp_call = "call P1()";
var result = snowflake.execute({sqlText: sp_call});
result.next();
var return_msg = result.getColumnValue(1);
if (return_msg!='SUCCESS') {
throw return_msg;
}
else {
// call P2() and P3() from here...
// perhaps in their own try/catch blocks
}
}
catch (err) {
return return_msg;
}
return return_msg;
} $$;
CREATE OR REPLACE PROCEDURE P1()
RETURNS varchar
LANGUAGE javascript
AS $$ {
var result = "SUCCESS";
try {
// comment/uncomment the next line to simulate success/failure
throw 'naughty naughty';
}
catch (err) {
result = err;
}
return result;
} $$; ```
关于javascript - 处理 Snowflake 中调用多个存储过程的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59821908/