Snowflake:如果在主过程中调用存储过程不存在或不可调用,如何在存储过程中抛出异常?

Snowflake: how to throw an exception in a stored procedure if it is called inside the main procedure doesn't exist or not callable?

提问人:Yanki141 提问时间:9/23/2022 最后编辑:marc_sYanki141 更新时间:9/23/2022 访问量:460

问:

我有一个过程 P1,它调用过程 P2。当 P2 不存在时,我需要处理异常。

目前它正在投掷

第 3 行位置 4 上未捕获的类型为“STATEMENT_ERROR”的异常:SQL 编译错误:未知的用户定义函数 P2”

有什么方法可以以不同的方式处理此异常?

P1()
BEGIN
    call P2();
END;
sql 异常 存储过程 snowflake-cloud-data-platform 雪花-schema

评论


答:

1赞 Gokhan Atil 9/23/2022 #1

您可以尝试这样的东西来处理异常吗?

create or replace procedure test_procedure()
    returns VARCHAR
    language sql
AS
declare
      msg VARCHAR DEFAULT '';
begin
  begin
    CALL P2();
  exception
    when other then
     msg := msg || ' P2 does not exist but it is OK...';
  end;
 begin 
    CALL P3();
  exception
    when other then
     msg := msg || ' P3 does not exist but it is OK';
  end;
 return msg;
end;

CALL test_procedure();

评论

1赞 Yanki141 9/23/2022
实际上,我在主过程(P2)中调用了多个过程(如P3,P3,P1)。我认为上述选项在这种情况下不起作用。
0赞 Gokhan Atil 9/23/2022
@Yanki141实际上这个可以处理所有异常,所以它应该可以工作。不要关注错误消息。如果要继续运行进程,可以使用多个开始结束。更新了示例
0赞 Yanki141 9/26/2022
如果缺少任何过程,我需要引发运行时异常。当不存在任何调用过程时,不应推进主过程。
0赞 Gokhan Atil 9/27/2022
@Yanki141 示例代码已引发异常。是否需要引发自定义异常?