0

テーブルで更新されたときに 2 つのフィールドを監査するトリガーを作成しようとしています。PL/SQL をコンパイルしようとしましたが、次のエラーが発生し続けます。

ORA-04079: invalid trigger specification

この問題を解決するためにDeclareまたはAsを使用して言及している他の SO の質問を参照する

CREATE OR REPLACE TRIGGER AUDIT_TRIGGER
BEFORE UPDATE OF MR_STATE, IS_EXEMPT
ON CX_MR mr
FOR EACH ROW
BEGIN
     IF UPDATING ('MR_STATE') THEN 
          INSERT INTO CX_AUDIT
          (
          INT_ID,
          FIELD_NAME,
          OLD_VAL,
          NEW_VAL,
          CHANGED_DATE,
          CHANGED_BY
          )
          VALUES
          (
          mr.INTEGRATION_ID,
          'MR_STATE',
          :old.MR_STATE,
          :new.MR_STATE,
          SYSDATE,
          'Trigger'
          );
     END IF;

    IF UPDATING ('IS_EXEMPT') THEN 
          INSERT INTO CX_AUDIT
          (
          INT_ID,
          FIELD_NAME,
          OLD_VAL,
          NEW_VAL,
          CHANGED_DATE,
          CHANGED_BY
          )
          VALUES
          (
          mr.INT_ID,
          'IS_EXEMPT',
          :old.IS_EXEMPT,
          :new.IS_EXEMPT,
          SYSDATE,
          'Multiroom'
          );
     END IF;
END;

ただし、何を宣言すべきか、またはこれが解決策であるかどうかはわかりません。

4

1 に答える 1

1

エラーは、テーブル名の後に余分なトークン「mr」があることのようですCX_MR。トリガー定義でテーブル名に別名を付けることはできません。

次に、トリガーの本体でエイリアスを使用しようとしているように見えます。mr「mr」トークンを削除すると、トリガーのヘッダーはコンパイルされるはずですが、INSERTステートメントで使用するとコンパイル エラーが発生します。しかし、あなたがそこで何をしようとしているのかを理解しているかどうかはわかりません...:newおよび:old疑似レコードを使用して古い値と新しい値を取得する方法を認識しているようです。:new.int_id私の推測では、両方のINSERTステートメントで必要なだけです。しかし、あなたが何らかの理由でその構成を避けているのか、それともmr.int_id何か違うことを期待しているのかは、私には明らかではありません.

于 2013-10-28T16:20:44.577 に答える