我最近在try Snowflake的JavaScript存储过程,遇到了一个意外的行为.我创建了一个简单的存储过程,如Snowflake文档here所述.
下面是我创建的存储过程:
create procedure broken()
returns varchar not null
language javascript
as
$$
var result = "";
try {
snowflake.execute( {sqlText: "Invalid Command!;"} );
result = "Succeeded";
}
catch (err) {
result = "Failed: Code: " + err.code + "\n State: " + err.state;
result += "\n Message: " + err.message;
result += "\nStack Trace:\n" + err.stackTraceTxt;
}
return result;
$$
;
此存储过程的目的是通过执行无效的SQL命令而故意失败,然后使用try—catch块捕获错误.
当我调用存储过程时,它确实返回预期的错误消息,指示失败:
call broken();
输出:
+---------------------------------------------------------+
| BROKEN |
|---------------------------------------------------------|
| Failed: Code: 1003 |
| State: 42000 |
| Message: SQL compilation error: |
| syntax error line 1 at position 0 unexpected 'Invalid'. |
| Stack Trace: |
| Snowflake.execute, line 4 position 20 |
+---------------------------------------------------------+
但是,在判断Snowflake的查询历史时,我注意到这个过程被标记为成功运行.这似乎是自相矛盾的,因为该程序明确地旨在失败.我希望它会被标记为执行失败.
有人能解释一下为什么snowflake认为这是一个成功的运行,尽管预期的失败?是否有不同的方法来处理此类情况并确保失败的存储过程执行正确地反映在查询历史记录中?任何见解或建议将不胜感激.谢谢你!