Oracle Database トリガーを作成する

Oracle Database トリガーを作成する

Oracle Databaseで、トリガーを作成する手順を記述してます。、「CREATE [OR REPLACE] TRIGGER」で可能です。ここでは、実際に実行した結果を画像で掲載してます。

環境

  • OS windows11 home
  • Oracle Database 21c Express Edition
  • SQL Developer 21.2.1.204

手順

テーブル操作時に指定した処理を実行できるトリガーを作成するには、「CREATE [OR REPLACE] TRIGGER」を使用します。

CREATE [OR REPLACE] TRIGGER トリガー名
[BEFORE | AFTER | INSTEAD OF] [INSERT | UPDATE | DELETE] ON テーブル名
[FOR EACH ROW]
BEGIN
 処理;
END;
パラメータ説明
OR REPLACE同名のトリガーが存在した場合は上書き
BEFORE |
AFTER |
INSTEAD OF
トリガーを発動させるタイミング
before:データ操作前にトリガーを起動する
after:データ操作後にトリガーを起動する
instead of:データ操作されるSQL実行時に、SQLは実行しなでトリガーだけ起動
FOR EACH ROW複数行のデータ操作時に、各行ごとにトリガーを起動

実際に、「FOO」テーブルを削除すると履歴をとるために「FOOHISTORY」に削除日を書き込む、
トリガー「trg」を作成してみます。

CREATE OR REPLACE TRIGGER trg
AFTER DELETE ON FOO
FOR EACH ROW
BEGIN
 INSERT INTO FOOHISTORY values('DELETE',SYSDATE);
END;

実行結果を見ると作成されていることが確認できます。

トリガー起動

実際に「FOO」テーブルに「DELETE」を実行してトリガーを発動させてみます。

DELETE FROM FOO WHERE id=6;

トリガー「trg」を確認します。

SELECT * 
FROM FOOHISTORY;

実行結果

トリガーが実行されていることが確認できます。

条件式

以下のように、INSERT、UPDATE、DELETEにより処理を分けることも可能です。

CREATE OR REPLACE TRIGGER trg
AFTER INSERT OR UPDATE OR DELETE ON FOO
FOR EACH ROW
BEGIN
 IF inserting then
  INSERT INTO FOOHISTORY values('INSERT',sysdate);
 ELSIF updating then
  INSERT INTO FOOHISTORY values('UPDATE',sysdate);
 ELSIF deleting then
  INSERT INTO FOOHISTORY values('DELETE',sysdate);
 END IF;
END;