使用 Liquibase 创建雪花存储过程

Posted

技术标签:

【中文标题】使用 Liquibase 创建雪花存储过程【英文标题】:Using Liquibase to create snowflake storedprocedure 【发布时间】:2021-07-09 17:44:39 【问题描述】:

我正在尝试使用 liquibase 创建存储过程,但是在进行 liquibase 更新时失败并出现以下错误:

在 11:37:58 启动 Liquibase(版本 4.4.0 #11 构建于 2021-06-09 16:36+0000)
Liquibase 版本:4.4.0
位置 5 处的语法错误第 5 行意外的“$”。 [失败的 SQL: (1003) 创建或替换过程 SP_TEST_AZURE()
    返回字符串
    语言 javascript
    作为
    $$
    变量 sql_cmd

是否缺少配置?

【问题讨论】:

【参考方案1】:

错误消息表明 Liquidbase 与 $$ 存在问题。我怀疑:

The endDelimiter SQL attribute

在 SQL 中为 PROCEDURE 和 FUNCTION 使用 endDelimiter

当变更集包含 SQL 以创建包含默认“;”的存储过程或函数时,可以使用 endDelimiter结束分隔符。为避免将不完整的语句发送到数据库,必须将变更集标记为具有不同的 endDelimiter。

必须为某些 dbms 系统指定 endDelimiter 才能运行多个语句。

将其设置为空字符串:endDelimiter="" 应该可以解决它。

【讨论】:

是的,它的结束分隔符默认为';',让我检查一下那个选项.. 谢谢 完美,你是对的,感谢我让 endDelimiter="" 成功执行

以上是关于使用 Liquibase 创建雪花存储过程的主要内容,如果未能解决你的问题,请参考以下文章

雪花存储过程变量绑定错误

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

雪花存储过程从 dbt 失败

当我尝试使用雪花存储过程执行更改命令时给出错误?

雪花循环通过数组运行存储过程

带有输入变量的雪花存储过程