Я использую Liquibase для обновления некоторых таблиц и, кажется, сталкиваюсь с ошибкой: всякий раз, когда в моем файле .yaml есть ;, он выдает ошибку (вставьте только ее часть, поскольку он просто повторяет то же сообщение об ошибке):
SEVERE 1/11/18 11:39 AM: liquibase: _master.xml: Tables/Team/Team.updateTeamNames.yaml::1::mayj4: Ch ange Set Tables/Team/Team.updateTeamNames.yaml::1::mayj4 failed. Error: You have an error in your S QL syntax; check the manual that corresponds to your MySQL server version for the right syntax to us e near 'UPDATE Team SET Name ='B' WHERE Name ='Y'; UPDATE Team SET Name ='C' WHERE Name ' at line 1 [Failed 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.exception.DatabaseException: You have an error in your SQL syntax; check the manual that c orresponds to your MySQL server version for the right syntax to use near 'UPDATE Team SET Name ='B' WHERE Name ='Y'; UPDATE Team SET Name ='C' WHERE Name ' at line 1 [Failed SQL: UPDATE Team SET Name = 'A' WHERE Name = 'X'; UPDATE Team SET Name ='B' WHERE Name ='Y'; UPDATE Team SET Name ='C' WHERE 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 update
Вот файл .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';
Что я использую
Я пробовал добавить splitStatements: true к .yaml, но это не имеет значения, как предлагает документация Liquibase.
Обновление 1 Кажется, что даже удаление точки с запятой все равно не удается, поэтому это связано с выполнением нескольких запросов.
О, чувак, я такой глупый, спасибо, что указали на это! Обновил, чтобы было понятнее






Может быть, примерно так:
- 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), но я не являюсь экспертом, поскольку я не использую liquidbase с конфигурацией yml.
Вы можете попробовать использовать «>» для объединения нескольких операторов sql в один исполняемый оператор.
- changeSet:
author: Bob
id: 1
changes:
- sql:
comment: DML statements to rectify previously added names
dbms: mysql
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';
Теперь это выглядит еще лучше.
@Saumil> часть Ямла?
YAML поддерживает '>' (сложенный стиль) для объединения нескольких операторов в один оператор, здесь он может использоваться для объединения в один и может выполняться как операторы SQL один за другим.
Либо вы запутываете свои журналы, не анонимизируя yaml, либо я просто не вижу связанных запросов; (