使用LIQUIBASE WITHOUT CHANGELOGS时如何执行多个插入

时间:2015-11-25 04:16:24

标签: liquibase

根据this文档

Liquibase可以在给定路径中执行多个sql文件,而无需任何更改日志。但是,当我使用下面的插入

创建文件时
insert into address (id, line1, line2) values (1, '121 Main Ave', null);
insert into address (id, line1, line2) values (2, '662 Broadway', 'Suite 3317');
insert into address (id, line1, line2) values (3, '412 Riverview', null);

我收到以下错误

  

无效sql语法

3 个答案:

答案 0 :(得分:9)

Liquibase无法识别您的sql文件。 在你的sql文件上添加这两行:

--liquibase formatted sql
--changeset {authorName}:{id}

根据您的意愿更改authorName和id。您还可以在 changelog.xml 文件中执行以下操作:

<changeSet author="authorName" id=”id”>
  <sqlFile path="insertcommands.sql"/>
</changeSet>

在这种情况下,您无需置身 insertcommands.sql 文件

--liquibase formatted sql
--changeset {authorName}:{id}
像你之前做的那样。

PS - 在liquibase-3.4和mysql5.5上测试

答案 1 :(得分:2)

编写多个查询有两种方法

1)使用<sqlFile>标签 path:所有插入查询写入的文件路径

<changeSet author="liquibase-docs" id="sqlFile-example"> 
    <sqlFile encoding="utf8" path="filepathsql"relativeToChangelogFile="true" splitStatements="true"stripComments="true"/>
</changeSet>`  

注意:为多个查询执行
写需要写入属性splitStatements = true http://www.liquibase.org/documentation/changes/sql_file.html

2)<sql>标记

<changeSet author="liquibase-docs" id="sql-example">  
    <comment>insert queries</comment>
    <sql dbms="h2, oracle" 
                splitStatements="true"
                stripComments="true">         
        insert into address (id, line1, line2) values (1, "121 Main Ave", null);    
        insert into address (id, line1, line2) values (2, "662 Broadway", "Suite 3317");  
        insert into address (id, line1, line2) values (3, "412 Riverview", null);     
    </sql>    
</changeSet>    

http://www.liquibase.org/documentation/changes/sql.html

答案 2 :(得分:1)

您可以将loadData(或loadUpdate用于表中的部分更改)用于此目的:

<loadData encoding="UTF-8"
                  file="[path to csv]"
                  separator=";"
                  tableName="ADDRESS"/>

并提供包含以下内容的CSV文件:

id;line1;line2
1;121 Main Ave;null
2;662 Broadway;Suite 3317
3;412 Riverview;null