当包含SQL的Yaml文件具有分号时,Liquibase引发错误

时间:2018-10-31 23:57:48

标签: mysql liquibase

我正在使用Liquibase更新某些表,并且似乎遇到一个错误,即只要我的.yaml文件中包含;,它就会引发错误(仅放入部分错误中)因为它只会重复相同的错误消息):

  

严重时间1/11/11 11:39:liquibase:_master.xml:表/团队/Team.updateTeamNames.yaml::1::mayj4:Ch   ange Set Tables / Team / Team.updateTeamNames.yaml :: 1 :: mayj4失败。错误:您的S错误   QL语法;查看与您的MySQL服务器版本相对应的手册以获取适合我们的正确语法   e在'UPDATE Team SET Name ='B'WHERE Name ='Y'附近;第1行的UPDATE Team SET Name ='C'WHERE Name'   [失败的SQL:UPDATE团队SET名称='A',名称='X';更新团队SET名称=“ B”,名称=“ Y”;    更新团队SET名称='C',名称='Z']   liquibase.exception.DatabaseException:您的SQL语法有错误;检查手册   或与您的MySQL服务器版本相对应,以在'UPDATE Team SET Name ='B'附近使用正确的语法   WHERE Name ='Y';第1行的UPDATE Team SET名称='C'WHERE Name'[失败的SQL:UPDATE Team SET名称   ='A'WHERE Name ='X';更新团队SET名称=“ B”,名称=“ Y”;更新团队SET名称='C'在N   ame ='Z']

这也是我正在使用的命令:

  

liquibase --driver = com.mysql.cj.jdbc.Driver --classpath = C:\ mysql-connector-java-8.0.13 --logLevel = severe --changeLogFile = _master.xml --url =“ jdbc:mysql:// localhost:3306 / resource?useSSL = false&allowPublicKeyRetrieval = true“ --username = root --password = badpassword123更新

这是.yaml文件,其中包含完整的SQL。

---
databaseChangeLog:
- changeSet:
    author: mayj4
    id: 1
    changes:
        - sql:
            sql: 
                UPDATE Team SET Name = 'A' WHERE Name = 'X';
                UPDATE Team SET Name ='B' WHERE Name ='Y';
                UPDATE Team SET Name ='C' WHERE Name ='Z';

我正在使用什么

  • Liquibase 3.6.2
  • MySQL Connector Java 8.0.13
  • MySQL Workbench和服务器 8.0.13

我尝试将splitStatements: true添加到.yaml上,但这与the Liquibase documentation所建议的一样。

更新1 似乎即使删除分号仍会失败,这与运行多个查询有关。

2 个答案:

答案 0 :(得分:0)

也许是这样的:

         - UPDATE Team SET Name = 'Maria' WHERE Name = 'Samurai';
         - UPDATE Team SET Name ='Ray' WHERE Name ='Knights';
         - UPDATE Team SET Name ='Stephen' WHERE Name ='Vikings';

   - sql:
        sql: 
             sql1
   - sql: 
        sql:
             sql2

以此类推。

破折号-表示该条目是序列的一部分,并且由于您要执行SQL序列,这应该会有所帮助。 (您可以尝试使用一些变奏者,但是使用-语法是可行的。) 就个人而言,您的语法看起来很奇怪(为什么我应该将sql嵌套在sql中),但是我不是专家,因为我还没有在yml配置中使用Liquidbase。

答案 1 :(得分:0)

您可以尝试使用“ > ”将多个sql语句合并为一个可执行语句。

auto myVector = std::make_unique<std::vector<int>>(myInts, myInts + (sizeof(myInts)/sizeof(*myInts)));