如何解决Liquibase-执行多个pl / sql包
早上好, 我正在创建我的Liquibase更改日志,以便能够一键部署Oracle对象。
在我的项目中,我们有许多软件包以pkb / pks的形式保存在文件系统中(但我们也可以将它们另存为sql)。.
我想配置liquibase以便每次运行任务时始终执行包文件。
我找到了标记includeALL ..,但是只有在文件属于路径..时,该标记才会执行。
我怎么做才能每次执行它们?
我尝试过类似的事情
<changeSet id="01f11a6b-a473-4edc-bcc7-acfa802f4b48" author="deployment" runAlways="true">
<includeAll path="${url}/Database_Objects/"/>
</changeSet>
但是我出错了。
寻求帮助
Liquibase版本
dependencies {
classpath "org.liquibase:liquibase-core:3.4.1"
classpath "org.liquibase:liquibase-gradle-plugin:1.1.1"
classpath "com.oracle:ojdbc6:11.2.0.4"
}
注意:我正在通过Gradle / IntelliJ运行liquibase
解决方法
不能将
<includeAll>
和<include>
标记包含在具有runAlways属性的changeSet
标记中。要始终运行sql文件,必须始终查找以下标记。
SqlFile tag
感谢您的评论..很遗憾,它没有提供解决方案:(我需要执行几个包含程序包声明的SQL文件..
我什至尝试将所有文件合并为一个..,但仍然得到
当我尝试执行时,“原因:java.sql.SQLSyntaxErrorException:ORA-00900:无效的SQL语句”
这是我放在变更日志上的内容
<changeSet author="deployment" id="d4ad73ec-8fd4-4d4c-8590-b6ed9eec609f" runAlways="true" context="Fix">
<sqlFile dbms="oracle"
encoding="UTF-8"
endDelimiter="/\n"
path="${url}/50_db_objects.sql"
relativeToChangelogFile="false"
splitStatements="true"
stripComments="false"/>
</changeSet>
然后在50_db_objects.sql中我有类似的东西
create or replace package body xxxxx as
.....
end xxxxx ;
/
create or replace package body xxxxx2 as
.....
end xxxxx2 ;
/
,
尝试在您的变更集声明中设置 splitStatements="false"。通过设置“true”,您告诉 liquibase 它应该单独执行每个命令,并且这些命令以“;”分隔。默认。
<changeSet author="deployment" id="d4ad73ec-8fd4-4d4c-8590-b6ed9eec609f" runAlways="true" context="Fix">
<sqlFile dbms="oracle"
encoding="UTF-8"
endDelimiter="/\n"
path="${url}/50_db_objects.sql"
relativeToChangelogFile="false"
splitStatements="false"
stripComments="false"/>
</changeSet>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。