2

1 つのアプリケーションによって常に更新される (挿入ステートメント) テーブル A があります。テーブルAの数列だけで構成される別のテーブルBを作成したいのですが、このためにテーブルAに挿入後にトリガーされるトリガーを作成することを考えましたが、トリガー内に挿入ステートメントをどのように記述すればよいかわかりません。私はデータベースの専門家ではないので、何か簡単なことを見逃しているかもしれません。助けてください。

これが私のトリガーコードです:

    CREATE OR REPLACE TRIGGER "MSG_INSERT_TRIGGER" 

AFTER
insert on "ACTIVEMQ_MSGS"

DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
begin
execute immediate 'truncate table MSG_BACKUP';
insert into MSG_BACKUP select * from ACTIVEMQ_MSGS;
COMMIT;
end; 
4

2 に答える 2

3

これは良い考えではないようです。新しいレコードがテーブル A に挿入されるたびに、テーブル B からすべてを削除し、テーブル A からすべてのレコードをコピーします。テーブル A に多くのレコードがあると、これは大きなパフォーマンスの問題になります。

テーブル A の目的の列にビューを作成するだけで十分ではないでしょうか?

そうでない場合、つまり、すべての挿入を他のテーブルに「記録」したい場合は、ここで行います。(次のフィールドをコピーするとします: f1、f2、f3)

CREATE OR REPLACE TRIGGER TR_AI_ACTIVEMQ_MSGS
AFTER INSERT ON ACTIVEMQ_MSGS
FOR EACH ROW
BEGIN
  INSERT INTO MSG_BACKUP (f1, f2, f3)
  VALUES (:new.f1, :new.f2, :new.f3);            
END TR_AI_ACTIVEMQ_MSGS;
于 2012-05-16T11:34:59.087 に答える
1

Oracle トリガー内では、レコード値は de :new 疑似レコードで使用できます。挿入ステートメントは次のようになります。

insert into B (column1, column2) 
values (:new.tableA_col1,:new.tableA_col2)
于 2012-05-16T11:35:38.000 に答える