javascript - 处理 Snowflake 中调用多个存储过程的异常

标签 javascript stored-procedures snowflake-cloud-data-platform

我有 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/

相关文章:

javascript - 从图像元素动态创建 Canvas 元素

sql - 动态 SQL 存储过程不填充临时表

mysql - 如何在 MySQL 存储过程中通过 ID 获取行?

javascript - 雪花中的 ARRAY_REMOVE()?

javascript - 使用 IP 地址而不是域名来抓取网络服务器的屏幕

javascript - 学习 JavaScript : display all firstnames with B as first letter

javascript - AnythingSlider 静态链接第一次需要 2 次点击

SQL:使用函数作为存储过程的参数

sql - 未使用 WHERE 语句过滤掉 NULL 值

azure - 在 Azure 数据工厂中创建 SnowFlake 链接服务时出现索引超出范围错误