雪花程序没有被 catch 块捕获
Posted
技术标签:
【中文标题】雪花程序没有被 catch 块捕获【英文标题】:Snowflake procedure not getting caught by catch block 【发布时间】:2021-07-29 08:15:38 【问题描述】:为什么我在 javascript 中的雪花程序会产生错误并且没有被 catch 块捕获?
我有一个像这样创建的非常简单的过程,而不是进入 catch 并记录返回 JAVASCRIPT UNCAUGHT
异常的错误。
有人可以帮忙吗?代码如下:
CREATE OR REPLACE PROCEDURE TEST()
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS
$$
var CorrectSQL =` SELECT COL1, COL2 FROm TABLE_1 LIMIT 10`;
var InCorrectSQL =` SELE COL1, COL2 FROm TABLE 2 LIMIT 10`; // SYNTAX ERROR SELE
var InsertIntoErrorLog =` INSERT INTO ERROR_LOG VALUES ('ERROR')`;
try
snowflake.execute(sqlText:CorrectSQL);
snowflake.execute(sqlText:InCorrectSQL);
catch(err)
snowflake.execute(sqlText: InsertIntoErrorLog);
return err;
$$
【问题讨论】:
你有一个错字:snowflake.excute
。它会进入 catch 块,然后在那里出现错误。
嗨@Barmar 我在真实程序中输入错误这是正确的snowflake.execute
snowflake.execute
是否返回承诺?
如果我像这样更正我的 InCorrectSQL ` SELE COL1, COL2 FROm TABLE 2 LIMIT 10` 那么它可以工作
【参考方案1】:
实际上,它按预期工作。你有“返回错误”;命令最后,这就是它返回错误消息的原因。试试这个:
CREATE OR REPLACE PROCEDURE TEST()
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS
$$
var CorrectSQL = `SELECT COL1, COL2 FROm TABLE_1 LIMIT 10`;
var InCorrectSQL = `SELE COL1, COL2 FROm TABLE_2 LIMIT 10`;
var InsertIntoErrorLog =`INSERT INTO ERROR_LOG VALUES ('ERROR')`;
try
snowflake.execute(sqlText:CorrectSQL );
snowflake.execute(sqlText:InCorrectSQL );
catch (err)
snowflake.execute(sqlText: InsertIntoErrorLog);
// return err;
$$;
【讨论】:
@Gokahn Atil 谢谢先生,我有 snowflake.execute 声明,我在 return 声明之前写过;它也没有执行此语句。这是否意味着它将脱离捕获并且不会执行返回之前的任何内容 实际上,它按预期工作。它写入日志表(上面的代码),除非在执行最后一个查询时出错。 :)以上是关于雪花程序没有被 catch 块捕获的主要内容,如果未能解决你的问题,请参考以下文章