代码之家  ›  专栏  ›  技术社区  ›  Tom

liquibase noob再次触发-sqlfile标记出错

  •  1
  • Tom  · 技术社区  · 15 年前

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

    任何想法都将受到极大的赞赏。 事先谢谢。

    1 回复  |  直到 15 年前
        1
  •  7
  •   mjv    15 年前

    我对Liquibase一无所知,但那是 XML模式的优点 :通过读取XSD,我们可以推断系统在向其提供databaseChangeLog时的期望值。

    如果您查看XSD,您可以有效地看到 <databaseChagneLog> 元素应包括所列元素的( <preCondition> , <property> , <changeSet> 等。。。在错误消息中报告。

    (通过阅读XSD)似乎 <sqlFile> 元素应包含在 <变更集; .

    所以也许你只需要:

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

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