Liquibase endDelimiter 用法

Posted

技术标签:

【中文标题】Liquibase endDelimiter 用法【英文标题】:Liquibase endDelimiter usage 【发布时间】:2015-06-09 21:20:44 【问题描述】:

尝试从 Liquibase 运行它:

--changeset blah runOnChange:true endDelimiter:\n/\s*\n|\n/\s*$
DELETE MYTABLE;
INSERT INTO MYTABLE(A,B,C) VALUES ('A', 'B', 'C');

DECLARE
  row_count NUMBER;
BEGIN
  SELECT COUNT(1) INTO row_count FROM OTHERTABLE;
  IF (row_count = 0)
    THEN DELETE MYTABLE WHERE A LIKE 'BLAH:%';
  END IF;
END;
/

但是得到这个错误:

原因:java.sql.SQLSyntaxErrorException:ORA-00911:无效 人物

似乎这在这些情况下有效:

    只有插入/删除(没有声明语句块),没有 endDelimiter 语句 仅使用 declare 语句块(无插入/删除)和 endDelimiter 语句

但它并不能一起工作。 ??

【问题讨论】:

【参考方案1】:

试试

DECLARE
  row_count NUMBER;
BEGIN
    DELETE MYTABLE;
    INSERT INTO MYTABLE(A,B,C) VALUES ('A', 'B', 'C');

  SELECT COUNT(1) INTO row_count FROM OTHERTABLE;
  IF (row_count = 0)
    THEN DELETE MYTABLE WHERE A LIKE 'BLAH:%';
  END IF;
END;

或在每条语句后加一个“/”

【讨论】:

谢谢我也在努力解决这个问题.. 工作正常。试图将这两个“块”与风格偏好分开,但效果很好。

以上是关于Liquibase endDelimiter 用法的主要内容,如果未能解决你的问题,请参考以下文章

是否存在 liquibase 锁定超时?

如何使用 Liquibase 强制列顺序?

liquibase的使用

使用 Liquibase 创建雪花存储过程

Liquibase-数据库版本管理使用

Liquibase:如何使用 CURRENT_TIMESTAMP 加载数据?