You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake Task执行的存储过程中输出错误?遇RAISE_ERROR未定义问题

Snowflake JavaScript存储过程中RAISE_ERROR未定义问题解决

我参照建议编写了Snowflake JavaScript存储过程,尝试在catch块中用RAISE_ERROR输出错误信息,代码如下:

CREATE OR REPLACE PROCEDURE my_stored_procedure()
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS
$$
try {
  // 存储过程业务代码
} catch (err) {
  // 输出错误信息
  var errorMsg = 'Error in stored procedure: ' + err.message;
  RAISE_ERROR(errorMsg, 1001);
}
$$;

随后执行以下语句查询任务历史:

select * from table(information_schema.task_history(
    scheduled_time_range_start=>dateadd('day',-7,current_timestamp()),
    result_limit => 100,
    task_name=>'TS_COMBI_REFRESH'))
order by scheduled_time;

但得到的错误信息始终为:

Error_Message
JavaScript执行错误: Uncaught ReferenceError: TS_COMBI_REFRESH中未定义RAISE_ERROR,位置在' RAISE_ERROR(errorMsg, 1001);'第3位,堆栈跟踪: TS_COMBI_REFRESH第61行

问题原因

Snowflake的JavaScript存储过程环境中并不存在内置的RAISE_ERROR函数,这是错误的用法建议。

正确实现方式

在Snowflake JavaScript存储过程中,有两种标准方式抛出自定义错误:

方式1:直接抛出JavaScript Error对象

CREATE OR REPLACE PROCEDURE my_stored_procedure()
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS
$$
try {
  // 存储过程业务代码
} catch (err) {
  var errorMsg = '存储过程执行错误: ' + err.message;
  throw new Error(errorMsg);
}
$$;

方式2:执行SQL的RAISE命令

通过snowflake.createStatement执行SQL的RAISE ERROR语句,这种方式可以更灵活地定义错误级别:

CREATE OR REPLACE PROCEDURE my_stored_procedure()
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS
$$
try {
  // 存储过程业务代码
} catch (err) {
  var errorMsg = '存储过程执行错误: ' + err.message;
  snowflake.createStatement({
    sqlText: "RAISE ERROR :1",
    binds: [errorMsg]
  }).execute();
}
$$;

验证

修改存储过程代码后,重新创建存储过程并关联任务执行,再次运行任务历史查询语句,即可在ERROR_MESSAGE列中看到自定义的错误信息。

内容的提问来源于stack exchange,提问作者Ee Ann Ng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:33:24