雪花存储过程异常和失败
Snowflake Stored Procedure Exception & Failure
专家们,
对雪花中的异常处理有疑问。我知道我们可以使用 try & catch 块来处理错误并使用 return/throw 错误消息。
- throw 和 return 有什么不同 - 我都试过了,它们的行为是一样的。
- 以上都发回错误信息。但是在调用程序中没有失败。我们有没有类似于oracle中的RAISE Error的东西。
如有问题请告诉我。
- return关键字return是一个值并退出当前函数。 returned 值可能是一条错误消息,但它 returned 是作为常规字符串而不是错误条件。
- throw 关键字引发错误并退出当前函数。如果上面的执行堆栈中没有任何内容捕获到错误,则执行会因错误而停止。
Throw 将生成新错误或将现有错误发送到堆栈中。如果您使用 try/catch 块和有关错误的“return”信息,您要离开的函数将不会指示错误情况。它可能会发送有关错误的信息,但由于代码捕获了错误,因此它不会进入堆栈,如果堆栈上没有捕获到错误,则可能会终止执行。
当您 运行 来自 Snowflake UI 的 JavaScript UDF 或存储过程时,您可以判断存在未捕获的错误,因为 return 返回红色的。如果错误返回为黑色或蓝色,即使错误消息报告错误,也已被捕获并且调用状态不是错误。这是一个例子:
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.
专家们,
对雪花中的异常处理有疑问。我知道我们可以使用 try & catch 块来处理错误并使用 return/throw 错误消息。
- throw 和 return 有什么不同 - 我都试过了,它们的行为是一样的。
- 以上都发回错误信息。但是在调用程序中没有失败。我们有没有类似于oracle中的RAISE Error的东西。
如有问题请告诉我。
- return关键字return是一个值并退出当前函数。 returned 值可能是一条错误消息,但它 returned 是作为常规字符串而不是错误条件。
- throw 关键字引发错误并退出当前函数。如果上面的执行堆栈中没有任何内容捕获到错误,则执行会因错误而停止。
Throw 将生成新错误或将现有错误发送到堆栈中。如果您使用 try/catch 块和有关错误的“return”信息,您要离开的函数将不会指示错误情况。它可能会发送有关错误的信息,但由于代码捕获了错误,因此它不会进入堆栈,如果堆栈上没有捕获到错误,则可能会终止执行。
当您 运行 来自 Snowflake UI 的 JavaScript UDF 或存储过程时,您可以判断存在未捕获的错误,因为 return 返回红色的。如果错误返回为黑色或蓝色,即使错误消息报告错误,也已被捕获并且调用状态不是错误。这是一个例子:
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.