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

Snowflake SQL块中动态构造异常消息及语法错误解决

解决方案

以下是修正后的SQL脚本,可实现你的需求:

-- 调用目标存储过程
CALL SALES.ORDERS.ERROR_CHECK($database_name, $table_name, $initial_count, $final_count, '=');

-- 检查执行结果并按需抛出异常
DECLARE
    msg VARCHAR;
BEGIN
    -- 将存储过程返回的结果赋值给变量
    SELECT ERROR_CHECK INTO msg FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()));
    
    -- 判断是否为失败消息,若是则抛出异常终止执行
    IF POSITION('Failed' IN msg) > 0 THEN
        RAISE EXCEPTION '%', msg;
    END IF;
END;
$$;

-- 仅当上述块未抛出异常时,此语句才会执行
SELECT 'End of Script';

修正说明

  1. 移除了不必要的EXECUTE IMMEDIATE:Snowflake支持直接编写匿名PL/SQL块,无需动态执行包裹。
  2. 替换字符串匹配方式:用POSITION('Failed' IN msg) > 0替代LIKE,避免语法解析错误,同时实现“检测消息是否包含失败标识”的逻辑。
  3. 规范变量赋值:使用SELECT ... INTO语法为变量赋值,符合Snowflake PL/SQL的标准写法。

当存储过程返回Failed: Row counts do NOT match.时,匿名块会抛出该消息作为异常,后续的SELECT语句将被终止;若返回成功消息,则脚本会正常执行到末尾。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:06:28