Liquibase-在一个文件中上载多个Oracle触发器

Liquibase-在一个文件中上载多个Oracle触发器,oracle,triggers,liquibase,Oracle,Triggers,Liquibase,我有很多Oracle触发器存储在一个文件中,我们使用sqlplus上传到数据库。我们想用liquibase来管理这个,但我不想把触发器拆分成单独的文件。该文件看起来像: create or replace trigger Trig1 ... ... end Trig1; / create or replace trigger Trig2 ... ... end Trig2; / ...etc. 我试过了 <sqlFile splitStatements

我有很多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。然后忽略“/”并将所有内容作为无效的单个触发器包含。 有什么想法吗


TIA.

语法看起来正确。endDelimiter应该告诉它覆盖默认值;分隔符,并改为使用/。你用的是什么版本的liquibase?如果将\not单独放置,是否有帮助

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

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

  ...etc.

我对Oracle11g和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中添加一个in。 我不喜欢它,因为db-changelog.xml将非常大,我希望它出现在.sql文件中,而不是db-changelog.xml中

另一个问题是,当我使用诸如OracleSQLDeveloper之类的工具生成DDL并将它们粘贴进去时,它们就不起作用了。许多sql不起作用,可能不受支持。我花了很多时间测试我的SQL,并用Eclipse来修复SQL。
有什么建议或者你会解决这个问题吗?

我意识到这是一个老问题,OP已经继续,但对于其他人,我最终在这里找到了答案:

“endDelimiter”是一个正则表达式——应该使用以下字符串:

\n/\s*\n|\n/\s*$

我最近收到了这个问题。endDelimiter应为:

endDelimiter="(?m)^/$"

为什么不将
triggers.sql
拆分为单独的文件?使用“/”作为分隔符时,C样式的注释(/*…*/)、日期(2011年10月10日)等都会出现问题。看,是的!非常感谢。这对我来说完全有效,将一个大型初始模式脚本放在一个普通的.sql文件中,并使用一个极好的参数从变更集标记调用它!这是一个更干净的工作分隔符版本!非常感谢!注意:若要在原始SQL更改集中使用它,必须在不使用quites:endDelimiter:(?m)的情况下指定它^/$