雪花程序没有被 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 块捕获的主要内容,如果未能解决你的问题,请参考以下文章

使用 CData 雪花源导出数据的 SSIS 块超时错误

雪花中的变更数据捕获

雪花:REGEXP 替换为捕获组的大写

在雪花存储过程中捕获成功消息

雪花 JDBC 驱动程序内部错误:无法检索第一个箭头块的行数:null - 仅发生在 SELECT 语句上

雪花 CDC 从 S3 到雪花