Liquibase noob再次出现 - sqlFile标签出错

Tom*_*Tom 1 sql oracle xsd liquibase

我使用sqlFile包含一个sql脚本,该脚本使用oracle特定命令创建表(NOCACHE,NO PARALLEL,类似的东西).我的master.xml文件包含所有sql脚本并执行它们.但是,当它检测到标记时,它会失败并打印此错误消息.

C:\update.bat master.xml
Migration Failed: cvc-complex-type.2.4.a: Invalid content was found starting with element 'sqlFile'. 
One of '{
"http://www.liquibase.org/xml/ns/dbchangelog/1.9":preConditions,
"http://www.liquibase.org/xml/ns/dbchangelog/1.9":property,
"http://www.liquibase.org/xml/ns/dbchangelog/1.9":changeSet, 
"http://www.liquibase.org/xml/ns/dbchangelog/1.9":include,
"http://www.liquibase.org/xml/ns/dbchangelog/1.9":includeAll
}' is expected.
Run Code Online (Sandbox Code Playgroud)

我的master.xml非常简单

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

    <sqlFile path="createUsers.sql"/>
</databaseChangeLog>
Run Code Online (Sandbox Code Playgroud)

任何想法将不胜感激.提前致谢.

mjv*_*mjv 7

我对liquibase一无所知,但这就是XML Schema的美妙之处:通过阅读XSD,我们可以推断出当我们为它提供databaseChangeLog时系统所期望的内容.

如果您在XSD看,你可以看到,实际上是一个<databaseChagneLog>元素应包括列出的元素(的<preCondition>,<property>,<changeSet>等...因为在错误信息的报道.

看来(从阅读XSD)该<sqlFile>元素应该包含在a中<changeSet>.

所以也许你只需要:

... Header + databaseChangelog and its Namespace =as previously
...
   <changeSet>
       <sqlFile path="createUsers.sql"/>
   </changeSet>
</databaseChangeLog>
Run Code Online (Sandbox Code Playgroud)

但正如所说,我对底层语义甚至liquibase的一般目的一无所知.因此,您可以参考liquibase文档以了解您可能需要声明的其他内容等(例如,XSD允许包括许多其他元素,如validCheckSum,preContidtion等)

  • 请注意,changeSet标记中需要"id"和"author"属性.喜欢:<changeSet id ="1"author ="tom"> (2认同)