4

sqlplusを使用してDBにアップロードするファイルに多数のOracleトリガーを保存しています。これを管理する代わりに 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

4 に答える 4

1

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 が非常に大きくなり、db-changelog.xml ではなく .sql ファイルに入れたいので、私はそれが好きではありません。

もう 1 つの問題は、Oracle SQL Developer などのツールで DDL を生成して貼り付けると、機能しないことです。多くの SQL は機能しません。おそらくサポートされていません。SQL を修正するために、SQL と Liquibase を Eclipse でテストするのに多くの時間を費やしています。ヒントはありますか、それともこれを修正しますか?

于 2011-12-15T13:35:14.403 に答える
0

その構文は正しいようです。endDelimiter は、デフォルトをオーバーライドするように指示する必要があります。区切り文字を使用し、代わりに / を使用します。どのバージョンの liquibase を使用していますか? \ を単独で付けないと役に立ちますか?

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

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

  ...etc.
于 2010-02-12T20:10:46.160 に答える