Liquibase - загрузка множества триггеров Oracle в одном файле - PullRequest
4 голосов
/ 12 февраля 2010

У меня есть несколько триггеров Oracle, которые хранятся в файле, который мы загружаем в нашу БД с помощью sqlplus. Вместо этого мы хотим использовать liquibase, но я не хочу разделять триггеры на отдельные файлы. Файл выглядит так:

  create or replace trigger Trig1 ...
  ...
  end Trig1;
  /
  create or replace trigger Trig2 ...
  ...
  end Trig2;
  /
  ...etc.

Я пробовал

<sqlFile splitStatements="true" endDelimiter="/" path="triggers.sql">

но, похоже, он все еще пытается разделить на ';'. Если я изменю splitStatements на false. затем он игнорирует «/» и включает все как недопустимый одиночный триггер. Есть идеи?

ТИА.

Ответы [ 4 ]

3 голосов
/ 22 августа 2014

Я недавно получил эту проблему. endDelimiter должен быть:

endDelimiter="(?m)^/$"
3 голосов
/ 06 июня 2013

Я понимаю, что это старая проблема, и OP перешел, но для всех остальных я нашел ответ здесь: http://forum.liquibase.org/topic/oracle-end-delimiter-issue.

Оказывается, "endDelimiter" является регулярным выражением - эту строку следует использовать:

\n/\s*\n|\n/\s*$
1 голос
/ 15 декабря 2011

У меня похожая проблема с Oracle 11g и Liquibase. Я получаю ORA-00911. В моем db-changelog.xml я указываю на файл sql, где у меня есть триггеры. Это не работает вообще. Я проверил то, что вы сказали выше с / \;

CREATE OR REPLACE TRIGGER ADRESSE_ID_TR 
            BEFORE INSERT ON ADRESSE 
            FOR EACH ROW 
            WHEN (new.ID IS NULL) BEGIN 
            SELECT adresse_seq.NEXTVAL 
            INTO   :new.ID 
            FROM   dual; 
            END ADRESSE_ID_TR;\

Мой обходной путь - добавить вход в db-changelog.xml. Мне это не нравится, потому что db-changelog.xml будет очень большим, и я хочу его в файлах .sql, а не в db-changelog.xml.

Другая проблема - когда я генерирую DDL с помощью таких инструментов, как Oracle SQL Developer, и вставляю их, они не работают. Многие sql не работают, вероятно, не поддерживаются. Я трачу много времени на тестирование своих SQL и Liquibase с Eclipse, чтобы исправить SQL. Любые советы или вы это исправите?

0 голосов
/ 12 февраля 2010

Этот синтаксис выглядит правильно. EndDelimiter должен сказать ему переопределить значение по умолчанию; разделитель и использовать / вместо. Какую версию liquibase вы используете? Поможет ли поставить \ не сам по себе?

  create or replace trigger Trig1 ...
  ...
  end Trig1; /

  create or replace trigger Trig2 ...
  ...
  end Trig2; /

  ...etc.
...