Mik*_*ike 3 oracle rollback liquibase
我正在使用 Liquibase 版本 3.5.3,编写需要执行 PL/SQL 的“格式化 sql”文件(到我们的 Oracle 11g 数据库)。
变更集使用“endDelimiter:/”选项来允许这样做。
--liquibase 格式化 sql --changeset mike:51.9 endDelimiter:/ /* -- '为 FIN_PLANS 创建/修改触发器' -- */ BEGIN HIST_PKG.TRIG_HIST_TAB('FIN_PLANS'); 结尾; /
此变更集的回滚同样需要执行 PL/SQL,但是尽管进行了大量搜索,我仍找不到执行此操作的方法。我尝试指定多个回滚语句,但每个回滚行都是单独执行的(如“sql 语句”),并且我不知道如何让它识别它是一个 PL/SQL“块”。
我已经尝试过回滚的 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 /
Run Code Online (Sandbox Code Playgroud)
我的搜索出现了 http://forum.liquibase.org/topic/issue-with-pl-sql-and-rollbacks 但这个解决方案使用“format xml”(而不是“format sql”)。还创建了https://liquibase.jira.com/browse/CORE-1608,但此后已关闭,因为它还指出可以使用“format xml”来完成。
那么是否可以在支持调用 PL/SQL 代码的“格式化 sql”文件中编写 liquibase 回滚呢?
一位同事找到了这个问题的答案。您必须在“变更集标头中”设置回滚结束分隔符。哎哟!
--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 /
Run Code Online (Sandbox Code Playgroud)
希望对像我一样苦苦挣扎的其他人有所帮助。