0

早上好,我正在创建我的 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

4

3 回答 3

0

尝试在您的变更集声明中设置 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>
于 2021-01-18T20:55:15.673 回答
0

Thankds for your comment .. unfortunately it does not give the solution :( I need to execute several sql file containing package declaration ..

I have even tried to merge all file in one ..but still getting

"Caused by: java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement" when I tried to exec

Here what I put on the changelog

<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>

then in 50_db_objects.sql I have something like that

create or replace package body xxxxx as
.....
end xxxxx ;
/
    
    
create or replace package body xxxxx2 as
.....
end xxxxx2 ;
/
于 2020-09-14T13:46:34.810 回答
0

<includeAll>并且<include>标签不能包含在changeSet具有 runAlways 属性的标签中。要实现始终运行 sql 文件,您需要查找以下标签。 SqlFile 标记

于 2020-09-13T10:41:27.463 回答