我遇到了liquibase解析sql文件的问题。看起来它无法识别';'作为分隔符。如果我只保留一个陈述而没有';'最后,它运行良好,但是显然我需要执行完整的命令集。 我的sql看起来像这样:
CREATE TABLE network_area (
network_area_id NUMBER(18) NOT NULL,
name VARCHAR2(30 CHAR) NOT NULL );
ALTER TABLE network_area ADD CONSTRAINT network_area_pk PRIMARY KEY (network_area_id );
ALTER TABLE network_area ADD CONSTRAINT network_area__un UNIQUE ( name );
我的liquibase插件看起来像这样:
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.6.2</version>
<configuration>
<propertyFile>src/test/resources/liquibase/liquibase.properties</propertyFile>
<changeLogFile>src/test/resources/liquibase/ddl/my-ddl.sql</changeLogFile>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
</configuration>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>update</goal>
</goals>
</execution>
</executions>
</plugin>
我得到的错误是:
Caused by: java.sql.SQLSyntaxErrorException: ORA-00922: missing or invalid option Caused by: Error : 922, Position : 121, Sql = CREATE TABLE network_area ( network_area_id NUMBER(18) NOT NULL, name VARCHAR2(30 CHAR) NOT NULL );
答案 0 :(得分:0)
尝试像这样在splitStatements
标签中添加<sql>
:
<sql
endDelimiter=";"
splitStatements="true"
stripComments="true">
CREATE TABLE network_area (
network_area_id NUMBER(18) NOT NULL,
name VARCHAR2(30 CHAR) NOT NULL );
</sql>
<sql
endDelimiter=";"
splitStatements="true"
stripComments="true">
ALTER TABLE network_area ADD CONSTRAINT network_area_pk PRIMARY KEY (network_area_id );
</sql>
<sql
endDelimiter=";"
splitStatements="true"
stripComments="true">
ALTER TABLE network_area ADD CONSTRAINT network_area__un UNIQUE ( name );
</sql>
答案 1 :(得分:0)
我最终选择了替代方法,设置了flywaydb。这是我的配置示例,适用于任何认为有用的人:
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<configuration>
<configFile>src/test/resources/flyway/flyway.properties</configFile>
<locations>
<location>filesystem:src/test/resources/flyway/migration</location>
<location>filesystem:src/test/resources/flyway/dataload</location>
</locations>
</configuration>
<dependencies>
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1.p27350958</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>clean</goal>
<goal>migrate</goal>
</goals>
<phase>test</phase>
</execution>
</executions>
</plugin>