0

我已经设置了 liquibase。我目前有 4-5 个要加载的触发器,每个触发器都存储在一个单独的文件中。所有的触发器都在不同的表上。但是我不断收到此错误:

严重的 2013 年 9 月 17 日下午 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 ;
4

2 回答 2

0

DELIMITER$$是 MySQL 客户端解析器可以理解的命令,但不是通过 Liquibase 使用的 JDBC。

您需要在引用文件的方式中指定分隔符,可能为<sqlFile endDelimiter="$$" path="..."/>

于 2013-09-26T05:28:44.037 回答
0

'endDelimiter' 是一个正则表达式,所以试试这个

<sqlFile endDelimiter="\$\$" path="..."/>
于 2015-09-08T22:17:13.840 回答