【问题标题】:Snowflake procedure not getting caught by catch block雪花程序没有被 catch 块捕获
【发布时间】: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` 那么它可以工作

标签: javascript sql snowflake-cloud-data-platform


【解决方案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 声明之前写过;它也没有执行此语句。这是否意味着它将脱离捕获并且不会执行返回之前的任何内容
  • 实际上,它按预期工作。它写入日志表(上面的代码),除非在执行最后一个查询时出错。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
相关资源
最近更新 更多