MySQL запускает Liquibase

У меня установлена ​​Ликвибаза. В настоящее время у меня есть 4-5 триггеров, которые я хотел бы загрузить, причем каждый триггер хранится в отдельном файле. Все триггеры находятся в отдельных таблицах. Однако я продолжаю получать эту ошибку:

СЕРЬЕЗНЫЙ 17.09.13 12:05:liquibase: не удалось изменить миграцию набора/09-16-2013-16-10.sql::129. Ошибка: Ошибка выполнения SQL DELIMITER $$

DELIMITER $$
CREATE TRIGGER `UPDATE_tableA` BEFORE UPDATE on `tableA`
FOR EACH ROW BEGIN
IF (OLD.ColumnA = NEW.ColumnA) and 
  ((OLD.ColumnB is null and NEW.ColumnB is null) or (OLD.ColumnB = NEW.ColumnB)) and 
  ((OLD.ColumnB is null and NEW.ColumnB is null) or (OLD.ColumnB = NEW.ColumnB)) and 
  ((OLD.ColumnC is null and NEW.ColumnC is null) or (OLD.ColumnC = NEW.ColumnC))  
  THEN
    SET NEW.ColumnA = 0;
    SET NEW.ColumnB = NULL;
    SET NEW.ColumnB = NULL;
    SET NEW.ColumnC = NULL;
END IF;
END$$
DELIMITER ;

DELIMITER $$
CREATE TRIGGER `UPDATE_tableB` BEFORE UPDATE on `tableB`
FOR EACH ROW BEGIN
IF (OLD.ColumnA = NEW.ColumnA) and 
  ((OLD.ColumnB is null and NEW.ColumnB is null) or (OLD.ColumnB = NEW.ColumnB)) and 
  ((OLD.ColumnB is null and NEW.ColumnB is null) or (OLD.ColumnB = NEW.ColumnB)) and 
  ((OLD.ColumnC is null and NEW.ColumnC is null) or (OLD.ColumnC = NEW.ColumnC))  
  THEN
    SET NEW.ColumnA = 0;
    SET NEW.ColumnB = NULL;
    SET NEW.ColumnB = NULL;
    SET NEW.ColumnC = NULL;
END IF;
END$$
DELIMITER ;

person user2766897    schedule 17.09.2013    source источник
comment
один из этих ColumnB следует считать ColumnD, т.е. Я не пытаюсь установить значение одного столбца дважды.   -  person user2766897    schedule 18.09.2013
comment
Вы поместили sql для триггера в отформатированный файл sql или в файл набора изменений xml?   -  person Jens    schedule 18.09.2013
comment
Если вы используете форматированный sql для этого, возможно, проблема в этом сообщении на форуме относится к вам...   -  person Jens    schedule 18.09.2013
comment
Мне удалось найти обходной путь с помощью плагина gradle. Я добавил подробности здесь: stackoverflow.com/questions/62654020/   -  person pcoates    schedule 01.07.2020


Ответы (2)


DELIMITER $$ — это команда, понятная парсеру клиента MySQL, но не через JDBC, который использует Liquibase.

Вам нужно указать разделитель в том, как вы ссылаетесь на файл, возможно, как <sqlFile endDelimiter="$$" path="..."/>

person Nathan Voxland    schedule 26.09.2013

'endDelimiter' - это регулярное выражение, поэтому попробуйте это вместо этого

<sqlFile endDelimiter="\$\$" path="..."/>
person John Shepherd    schedule 08.09.2015