【问题标题】:Liquibase - uploading many Oracle triggers in one fileLiquibase - 在一个文件中上传多个 Oracle 触发器
【发布时间】:2011-01-16 02:28:31
【问题描述】:

我有许多 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。

【问题讨论】:

  • 为什么不想将triggers.sql 拆分成单独的文件?

标签: oracle triggers liquibase


【解决方案1】:

我最近遇到了这个问题。 endDelimiter 应该是:

endDelimiter="(?m)^/$"

【讨论】:

  • 太棒了!这是工作分隔符的更清洁版本!十分感谢!附言要在原始 SQL 更改集中使用它,您必须在不指定的情况下指定它: endDelimiter:(?m)^/$
【解决方案2】:

我意识到这是一个老问题,并且 OP 已经继续前进,但对于其他任何人,我最终在这里找到了答案:http://forum.liquibase.org/topic/oracle-end-delimiter-issue

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

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

【讨论】:

  • 是的!谢谢!这对我完全有用,将一个大的初始模式脚本放在一个普通的 .sql 文件中,并从一个带有 <sqlFile path="db/20131022-initialSchema.sql" splitStatements="true" endDelimiter="\n/\s*\n|\n/\s*$"/>
【解决方案3】:

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

另一个问题是,当我使用 Oracle SQL Developer 等工具生成 DDL 并将它们粘贴进去时,它们不起作用。很多 sql 不起作用,可能不支持。我花了很多时间用 Eclipse 测试我的 SQL 和 Liquibase 来修复 SQL。 有什么提示或者你会解决这个问题吗?

【讨论】:

    【解决方案4】:

    该语法看起来是正确的。 endDelimiter 应该告诉它覆盖默认值;分隔符并使用 / 代替。您使用的是什么版本的 liquibase?如果您不单独放置 \ 会有帮助吗?

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

    【讨论】:

    猜你喜欢
    • 2017-08-21
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2021-10-10
    • 2016-12-27
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多