2009-10-23 3 views
1

En utilisant sqlFile pour inclure un script sql qui crée des tables en utilisant des commandes spécifiques à Oracle (NOCACHE, NO PARALLEL, etc.). Mon fichier master.xml inclut tous les scripts sql et les exécute. Cependant, lorsqu'il détecte une étiquette, il échoue et imprime ce message d'erreur.Le noob de Liquibase frappe à nouveau - Erreur sur la balise sqlFile

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. 

Mon master.xml est assez simple

<?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> 

Toutes les pensées seront grandement appréciés. Merci d'avance.

Répondre

7

Je ne sais rien liquibase, mais c'est la beauté du schéma XML: en lisant le XSD, nous pouvons en déduire ce que le système attend quand nous fournissons un databaseChangeLog.

Si vous regardez dans le XSD, vous pouvez voir que effectivement un élément <databaseChagneLog> doit inclure de l'élément répertorié (<preCondition>, <property>, <changeSet> etc ... comme indiqué dans le message d'erreur.

Il semble (de . la lecture du XSD) que l'élément <sqlFile> doit être inclus dans un <changeSet>

Alors peut-être vous avez juste besoin:

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

Mais comme je l'ai dit, je ne connais rien à la sémantique sous-jacente, ni même à l'objectif général de la liquibase. Vous pouvez donc vous référer à la documentation de Liquibase pour voir ce que vous pourriez avoir besoin de déclarer, etc. (par exemple le XSD permet d'inclure plusieurs autres éléments tels que validCheckSum, preContidtion etc.)

+0

merci. Lire le xsd est maintenant sur ma liste de choses à faire quand sh * t arrive. – Tom

+2

Notez que vous aurez besoin d'un attribut "id" et "author" dans la variable changeSet. Comme:

Questions connexes