雪花存储过程异常&&A [英] Snowflake Stored Procedure Exception & Failure

查看:38
本文介绍了雪花存储过程异常&&A的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

专家,

对雪花中的异常处理有疑问。我知道我们可以使用Try&;Catch挡路来处理错误,并使用Return/Throw错误消息。

  1. 抛出和返回有什么不同-我都试过了,它的行为是一样的。
  2. 以上两种情况都发回错误消息。然而,在调用程序中没有失败。我们在Oracle中是否有类似的引发错误。

如果有问题,请让我知道。

推荐答案

  1. return关键字返回值并退出当前函数。返回值可能是错误消息,但它是作为常规字符串返回的,而不是错误条件。
  2. Throw关键字引发错误并退出当前函数。如果其上方的执行堆栈中没有捕获到错误,则执行将停止并返回错误。
抛出将生成新错误或将现有错误向上发送到堆栈。如果您使用Try/Catch挡路并返回有关错误的信息,则您要离开的函数将不会指示错误条件。它可能会发送有关错误的信息,但由于代码捕获了错误,因此它不会向上堆栈,如果堆栈上部没有捕获到错误,则可能会终止执行。

当您从Snowflake UI运行JavaScript UDF或存储过程时,您可以看出出现了一个未捕获的错误,因为返回结果为红色。如果错误以黑色或蓝色返回,即使错误消息报告错误,它也已被捕获,并且呼叫状态不是错误。这里有个例子:

create or replace procedure FOO()
returns string
language javascript
as
$$

    // Run a helper function here
    myFunction();

    function myFunction(){
        var mySqlStatement = "select * from NONEXISTENT_TABLE";
        var statement1 = snowflake.createStatement({sqlText: mySqlStatement});
        statement1.execute();
    }
$$;

call foo(); // This will generate an error and return in red text.

create or replace procedure FOO()
returns string
language javascript
as
$$
    try{
        myFunction();
    }
    catch(e){
        return e.message;
    }

    function myFunction(){
        var mySqlStatement = "select * from NONEXISTENT_TABLE";
        var statement1 = snowflake.createStatement({sqlText: mySqlStatement});
        statement1.execute();
    }
$$;

call foo();

// This will catch an error and return it in blue text.
//External clients will not report an error, even through the 
//SP returns the error message.

这篇关于雪花存储过程异常&&A的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆