1

我使用 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.

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

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

4

1 回答 1

8

我对 liquibase 一无所知,但这就是XML Schema 的美妙之处:通过读取 XSD,我们可以推断系统在我们提供 databaseChangeLog 时的期望。

如果您查看 XSD,您可以看到一个<databaseChagneLog>元素实际上应该包括列出的元素 ( <preCondition>,<property><changeSet>...如错误消息中报告的那样。

看起来(通过阅读 XSD)该<sqlFile>元素应该包含在<changeSet>.

所以也许你只需要:

... Header + databaseChangelog and its Namespace =as previously
...
   <changeSet>
       <sqlFile path="createUsers.sql"/>
   </changeSet>
</databaseChangeLog>

但如前所述,我对底层语义一无所知,甚至对 liquibase 的一般用途一无所知。因此,您可以参考 liquibase 文档以查看您可能需要声明的其他内容等(例如,XSD 允许选择包含许多其他元素,例如 validCheckSum、preContidtion 等)

于 2009-10-23T15:43:17.407 回答