Liquibase提供了包含的SQL文件的语法错误,否则是正确的

时间:2018-09-26 10:07:46

标签: liquibase

我有一个更改日志文件,部分内容如下:

<include file="ChangeSets/00_SessionAuth.xml"/>
<include file="ChangeSets/01_Legacy_Baseline_V197_ANB.xml" context="legacy"/>
<include file="ChangeSets/02_V198_ANB.xml" context="non-legacy"/>

更改集01_Legacy_Baseline_V197_ANB.xml包含197个sql脚本,它们是旧数据库的一部分。

更改集02_V198_ANB.xml定义为:

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog  
                        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd
                        http://www.liquibase.org/xml/ns/dbchangelog-ext 
                        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

        <include file="ChangeSets/sql/Dummy_schema/V198_AddColumn.sql"/>

</databaseChangeLog>

当我使用非传统上下文运行Liquibase更新时,出现以下错误:

Unexpected error running Liquibase: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=SET SCEHMA = Dummy_schema;;BEGIN-OF-STATEMENT;<space>, DRIVER=3.62.56 [Failed SQL: SET SCEHMA = Dummy_schema;

SQL文件本身是正确的。

我认为这是与结束定界符或splitStatements相关的问题。

SQL如下所示:

SET SCEHMA = Dummy_schema;

ALTER TABLE T1 ADD COLUMN C1 VARCHAR(35)
               ADD COLUMN C2 INTEGER;

Call Sysproc.admin_cmd ('REORG TABLE dummy_schema.T1');

ALTER TABLE T2 ADD COLUMN CT1 INTEGER; 

Call Sysproc.admin_cmd ('REORG TABLE dummy_schema.T2');

我们正在使用DB2 V10.5。

有人可以提供属性列表吗,我们可以将其与tag一起使用。

致谢

1 个答案:

答案 0 :(得分:0)

我认为您的主张

  

SQL文件本身是正确的

不正确。如果 是有效的SQL(如果它是通过db2命令行应用程序运行的),但是通过JDBC查询发送的不是有效的SQL,这就是Liquibase所做的。