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

使用Liquibase创建Snowflake存储过程执行update报错如何解决

问题原因

syntax error line 5 at position 5 unexpected '$'. [Failed SQL: (1003) create or replace procedure SP_TEST_AZURE()
returns string
language javascript
as
$$
var sql_cmd

这个错误是Liquibase默认启用了变量替换功能,会将$识别为自定义变量的前缀,尝试解析$$里的内容为变量,最终导致SQL语法解析失败。此外Snowflake存储过程内部的JavaScript代码包含分号,Liquibase默认按分号拆分SQL语句也可能引发执行异常。

解决方案

按优先级推荐以下配置调整:

  • 方案1:全局关闭Liquibase变量替换
    在你的liquibase.properties配置文件中新增如下配置:

    liquibase.enableSubstitution=false
    

    该方案适用于所有变更脚本中没有使用Liquibase自定义变量的场景,配置后无需修改SQL语句即可正常执行。

  • 方案2:仅针对当前变更集调整配置
    如果需要保留全局变量替换功能,可以对对应存储过程的changeSet做如下调整:

    1. 给changeSet添加splitStatements="false"属性,关闭SQL语句拆分,避免拆分存储过程内部的分号
    2. 用<![CDATA[ ]]>标签包裹整个存储过程创建语句,避免Liquibase解析$特殊字符
      示例(XML格式changelog):
    <changeSet id="create-sp-test" author="yourname" splitStatements="false">
        <sql><![CDATA[
        create or replace procedure SP_TEST_AZURE()
        returns string
        language javascript
        as
        $$
        var sql_cmd
        -- 后续存储过程代码
        $$;
        ]]></sql>
    </changeSet>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 18:30:05