私はシステム/ソリューション全体を追跡するアクティビティテーブルを持っています。 アクティビティテーブルのトリガを作成しました。このトリガによって、私は他のシステムで使用されるシステムのすべてのイベントをキャプチャしています。さらに私はイベントとEVENTCOLVALテーブルに変更(I/U/D)を挿入しています。 EVENTCOLVALテーブルには、アクティビティテーブルのすべての列名と対応する値が含まれます。 テーブルの挿入、更新、削除イベントのキャプチャ別のテーブルへのトリガと挿入
は、だから私のトリガーは、次のようになります。CREATE OR REPLACE TRIGGER TRIG_Actv
AFTER INSERT or UPDATE
ON Activity
FOR EACH ROW
DECLARE
lvEventId number;
BEGIN
lvEventId := EventUniqId.NEXTVAL;
INSERT ALL
INTO Event (EventId,DateLastMaint)
VALUES (lvEventId, SYSTIMESTAMP)
INTO EVENTCOLVAL (EventId, COLNAME, COLVALUE)
VALUES (lvEventId, 'ActivityCol1', :new.ActivityCol1)
INTO EVENTCOLVAL (EventId, COLNAME, COLVALUE)
VALUES (lvEventId, 'ActivityCol2', :new.ActivityCol2)
INTO EVENTCOLVAL (EventId, COLNAME, COLVALUE)
VALUES (lvEventId, 'ActivityCol3', :new.ActivityCol3)
INTO EVENTCOLVAL (EventId, COLNAME, COLVALUE)
VALUES (lvEventId, 'ActivityCol4', :new.ActivityCol4)
INTO EVENTCOLVAL (EventId, COLNAME, COLVALUE)
VALUES (lvEventId, 'ActivityCol5', :new.ActivityCol5)
INTO EVENTCOLVAL (EventId, COLNAME, COLVALUE)
VALUES (lvEventId, 'ActivityCol6', :new.ActivityCol6)
INTO EVENTCOLVAL (EventId, COLNAME, COLVALUE)
VALUES (lvEventId, 'ActivityCol7', :new.ActivityCol7)
INTO EVENTCOLVAL (EventId, COLNAME, COLVALUE)
VALUES (lvEventId, 'ActivityCol8', :new.ActivityCol8)
---
---
---
---
---
INTO EVENTCOLVAL (EventId, COLNAME, COLVALUE)
VALUES (lvEventId, 'ActivityCol30', :new.ActivityCol30)
SELECT * FROM dual;
EXCEPTION
WHEN OTHERS THEN
-------
END TRIG_Actv;
PS:私は、アクティビティテーブル内の30個の列を持っているので、それはパフォーマンスヒットになりますように私は、トリガーのテーブルEVENTCOLVALのために複数のインサートを使用する必要はありません31行を挿入するとパフォーマンス上の問題になります。また、アクティビティ・テーブルのメトリックは、1秒で少なくとも100個挿入されます。したがって、少なくとも3000行を1秒で挿入します。これは、トリビュートの同期性のために、アクチビティ画面の速度を遅くし、システム全体を遅くします。他にも可能な方法はありますか?
私はlate.Iはあなたがコレクションを言っ理解コメントすることは本当に申し訳ありませんあなたは、挿入のためのFORALLの使用を言ったとき、私も理解していますが、使用の複合トリガーを言った理由を理解していませんでした。あなたの答えを受け入れるのを待っていると返信のために多くのおかげで多くの感謝:) –
@AnkurBhutani行の前に化合物tiggers stmtあなたはコレクションにすべてのstmtを追加します。次に、stmtの後に、すべてのstmtを一度に挿入します。これを想像してみましょう。あなたは1つのstmtで3行を更新します。それから、ordinallyトリガーは3つの別個のインサートを作り、化合物はそれが1つのstmtであることを認識する。各行の3回前に起動し、データを収集し、stmtが3レコードを1つ挿入した後に発生させます。 –
面白い音、私はそれを行って、感謝します。あなたの答えを受け入れる:) –