SQLのトリガーを作成/使用するサンプルです。Oracleで確認しています。
目次
説明 | トリガー(trigger) |
サンプル | トリガーを作成/変更する |
トリガーを削除する | |
トリガーを確認する |
トリガー(trigger)
- トリガーは、表のデータが変更された等のイベントをきっかけにして別の処理を行う仕組みです。
- トリガー(trigger)は、引き金という意味です。
- 以下は、Oracleのトリガーのリンクです。
https://docs.oracle.com/cd/E16338_01/appdev.112/b56265/tdddg_triggers.htm
トリガーを作成/変更する
トリガーを作成/変更するサンプルです。
1.以下、2つのテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
event |
---|
上記2テーブルからTestView1というトリガーを作成します。
CREATE OR REPLACE TRIGGER TestTrigger1
AFTER INSERT OR UPDATE OR DELETE
ON employee FOR EACH ROW
DECLARE
event1 log1.event%TYPE;
BEGIN
IF INSERTING THEN
event1 := 'Insert completed';
ELSIF UPDATING THEN
event1 := 'Update completed';
ELSIF DELETING THEN
event1 := 'Delete completed';
END IF;
INSERT INTO log1 (event) VALUES (event1);
-- またはプロシージャ等を呼ぶ
END;
1行目のTestTrigger1は、作成するトリガー名です。
OR REPLASEは任意です。REPLASEがある場合は実行すると上書きされます。
2行目は、INSERTまたはUPDATEまたはDELETEが行われた後に操作を行うとしています。
3行目は、対象のテーブルを指定しています。FOR EACH ROWは各行ごとの操作がトリガの対象になります。
5行目は、変数です。%TYPEは、logテーブルの項目eventと同じデータ型という意味です。
7~12行目のINSERTING、UPDATING、DELETINGは、条件述語と呼ばれるものでトリガーを起動した文を判定できます。
15行目は、insert文を実行しています。外部のプロシジャー等も実行することができます。
employeeテーブルにinsert文,update文,delete文を実行します。
INSERT INTO employee (id,name,romaji)
VALUES ('5','竹田','takeda')
UPDATE employee
SET name = 'user1', romaji = 'user1'
WHERE id = 3;
DELETE FROM employee
WHERE id = 2;
結果は、以下のとおりです。
event |
---|
Insert completed |
Update completed |
Delete completed |
トリガーを削除する
トリガーを削除するサンプルです。
DROP TRIGGER TestTrigger1;
drop triggerとトリガー名を指定します。
トリガーを確認する
USER_TRIGGERSテーブルで作成したトリガーを確認できます。
SELECT * FROM USER_TRIGGERS
where TRIGGER_NAME = 'TESTTRIGGER1';
whereの条件の値の大文字小文字は区別されます。
関連の記事
SQL シーケンス(順序)を作成/使用するサンプル
SQL シノニムを作成/使用するサンプル
SQL ビューを作成/使用するサンプル