目的のトリガーの作成方法は、把握できました。
photo credit: Håkan Dahlström via photopin cc
データベースにOracleを使っているシステムで、エラーがごくたまに発生しているとの連絡がありました。
Aシステムがデータをワークテーブルに入れて、Bシステムがワークテーブルのデータを加工して取り込んでいます。
ある条件のデータを加工して取り込んだ結果、エラーの発生に繋がっているのではないかとのことでした。
検証のためには、ワークテーブルのデータを使って確認すればいいのですが、Bシステムでデータを取り込む際に削除しています。
そのため、削除の際にトリガーで別テーブルにコピーをすることになりました。
作成したトリガー
今までにトリガーを作成したことが、どのデータベースでもなかったので、一からの勉強となりました。複数のWebサイトを見て試行錯誤した結果、以下のようにすればレコードのコピーができることがわかりました。
CREATE OR REPLACE TRIGGER TRIGGER1 BEFORE DELETE ON TMP FOR EACH ROW BEGIN INSERT INTO TMP2(COL1, COL2) VALUES (:OLD.COL1, :OLD.COL2); END;
TRIGGER1トリガー名です。
TMPテーブルのレコードが削除される前に、削除対象のレコードをコピーします。
:OLDで処理前の値が利用できます。
:OLDにコピー元の値が格納されていることを知った後は簡単でした。
参考にしたサイト
以下のサイトが今回の内容の作成には役立ちました。ORACLE/TRIGGER編 - オラクルちょこっとリファレンス