liquibase格式化的sql文件,包含多行回滚语句以允许Oracle PL / SQL

时间:2017-07-28 03:01:27

标签: oracle liquibase rollback

我正在使用Liquibase版本3.5.3,编写"格式化sql"需要执行PL / SQL的文件(到我们的Oracle 11g数据库)。

变更集使用" endDelimiter:/"允许这样做的选项。

- liquibase格式化的sql     --changeset迈克:51.9 endDelimiter:/     / * - '为FIN_PLANS创建/修改触发器' - * /     开始        HIST_PKG.TRIG_HIST_TAB(' FIN_PLANS&#39);     结束;     /

此变更集的回滚类似地需要执行PL / SQL,但是尽管进行了大量搜索,但我找不到这样做的方法。 我已经尝试过指定多个回滚语句,但每个回滚行都是单独执行的(如" sql语句")并且我不知道如何让它识别它是PL / SQL&#34嵌段"

我在回滚时尝试了endDelimitor选项,但无法识别。 我已经尝试过假设变更集的endDelimitor选项也适用于回滚,但是没有。

我想要的是像......

--liquibase formatted sql
--changeset mike:51.9 endDelimiter:/
/* --  'Create/Modify triggers for FIN_PLANS' -- */
BEGIN
   HIST_PKG.TRIG_HIST_TAB('FIN_PLANS');
END;
/
--rollback endDelimiter:/
--rollback BEGIN
--rollback  HIST_PKG.TRIG_HIST_TAB('FIN_PLANS');
--rollback END;
--rollback /

我的搜索已经出现了 http://forum.liquibase.org/topic/issue-with-pl-sql-and-rollbacks 但是这个解决方案是使用"格式化xml" (不是"格式化sql")。 此外,https://liquibase.jira.com/browse/CORE-1608已创建,但此后已关闭,因为它还指出可以使用"格式化xml"。

因此可以在"格式化sql"中编写liquibase回滚。支持调用PL / SQL代码的文件?

1 个答案:

答案 0 :(得分:3)

一位工作同事找到了这个问题的答案。 您必须在“changeset标头”中设置回滚结束分隔符。卫生署!

--liquibase formatted sql
--changeset mike:51.9 endDelimiter:/ rollbackEndDelimiter:/
/* --  'Create/Modify triggers for FIN_PLANS' -- */
BEGIN
   HIST_PKG.TRIG_HIST_TAB('FIN_PLANS');
END;
/
--rollback BEGIN
--rollback  HIST_PKG.TRIG_HIST_TAB('FIN_PLANS');
--rollback END;
--rollback /

希望能帮助像我这样挣扎的其他人。