Oracle Database トリガーを作成する
- 作成日 2023.03.13
- 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;
-
前の記事
kotlin 配列とlistの違い 2023.03.13
-
次の記事
sqlite データを取得する 2023.03.13
コメントを書く