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

Snowflake JavaScript存储过程抛出异常报错,如何修复?

修复Snowflake JavaScript存储过程抛出异常后错误元数据缺失的问题

问题场景

我尝试使用以下JavaScript存储过程代码,意图在特定ID将作为重复记录插入时抛出异常:

try {
        if ( isDuplicate == 'Y' ){
        throw new Error("This is a duplicate record");
        }   
        else {
           snowflake.execute({sqlText:  `INSERT INTO TEMP2_Table SELECT Id, Name FROM 
           TEMP1_Table;`});
        }
} catch (err) {
            throw err;
       }

但运行后出现如下错误:

ERROR -> Technical Error Occured FAIL_CODE : undefined
STATE : undefined
MESSAGE : This is a duplicate record
STACK_TRACE : undefined
QUERY_ID : 01aaf508-3200-ad9f-0000-631d265e1b7e
EXECUTED_SP : myproc
EXECUTION_SATUS : FAILURE

解决方案

问题根源在于直接抛出原生JavaScript的Error对象,Snowflake无法从该对象中提取标准错误码(FAIL_CODE)、SQL状态(STATE)等元数据,导致这些字段显示为undefined。

推荐使用Snowflake提供的Snowflake.createError()方法创建标准化错误对象,具体代码修改如下:

try {
    if (isDuplicate == 'Y') {
        // 创建符合Snowflake规范的错误对象,指定错误码、SQL状态和消息
        const duplicateError = Snowflake.createError({
            errorCode: 'DUPLICATE_RECORD', // 自定义业务错误码
            sqlState: '23000', // SQL标准约束违反对应状态码
            message: 'This is a duplicate record'
        });
        throw duplicateError;
    } else {
        snowflake.execute({
            sqlText: `INSERT INTO TEMP2_Table SELECT Id, Name FROM TEMP1_Table;`
        });
    }
} catch (err) {
    throw err;
}

关键说明:

  • sqlState: '23000'是SQL标准中约束违反的通用状态码,完全匹配重复记录插入的场景;
  • errorCode可以自定义为业务易识别的标识,比如DUPLICATE_RECORD,方便后续日志排查;
  • 使用Snowflake.createError()生成的错误会被Snowflake正确解析,返回的错误信息中FAIL_CODE、STATE等字段将不再是undefined。

内容的提问来源于stack exchange,提问作者Lochana Liyange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 08:47:15