根据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
语法
答案 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>
答案 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