Liquibase выдает ошибку, когда yaml-файл, содержащий SQL, имеет точки с запятой

Я использую 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';

Что я использую

  • Ликвибаза 3.6.2
  • Коннектор MySQL Java 8.0.13
  • Инструментальные средства MySQL и сервер 8.0.13

Я пробовал добавить splitStatements: true к .yaml, но это не имеет значения, как предлагает документация Liquibase.

Обновление 1 Кажется, что даже удаление точки с запятой все равно не удается, поэтому это связано с выполнением нескольких запросов.

Либо вы запутываете свои журналы, не анонимизируя yaml, либо я просто не вижу связанных запросов; (

Antoniossss 01.11.2018 01:36

О, чувак, я такой глупый, спасибо, что указали на это! Обновил, чтобы было понятнее

Troy Poulter 01.11.2018 01:41
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
492
2

Ответы 2

Может быть, примерно так:

         - 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';

Теперь это выглядит еще лучше.

Antoniossss 01.11.2018 01:47

@Saumil> часть Ямла?

Antoniossss 01.11.2018 02:11

YAML поддерживает '>' (сложенный стиль) для объединения нескольких операторов в один оператор, здесь он может использоваться для объединения в один и может выполняться как операторы SQL один за другим.

Saumil 01.11.2018 02:17

Другие вопросы по теме