CREATE TRIGGER

データベース・トリガーを作成する。

CREATE [ OR REPLACE ] TRIGGER [schema.]trigger
  { BEFORE | AFTER }
  { INSERT | DELETE | UPDATE [ OF COLUMN column-list ]  }
  ON [schema.]table
  [ FOR EACH ROW ]
  { sql | pl/sql }
OR REPLACE
同名の既存トリガーが存在した場合、そのトリガーを変更する。OR REPLACE 句を指定しなかった場合、同名の既存トリガーが存在するときはエラーが発生する。
schema
スキーマ名を指定する。
trigger
作成するトリガーの名前を指定する。
BEFORE
INSERT、UPDATE 又は DELETE を実行する前にトリガーを呼び出す。
AFTER
INSERT、UPDATE 又は DELETE を実行した後にトリガーを呼び出す。
INSERT
SQL の INSERT 文をトリガーの契機とする。
DELETE
SQL の DELETE 文をトリガーの契機とする。
UPDATE
SQL の UPDATE 文をトリガーの契機とする。
UPDATE OF COLUMN column-list
SQL の UPDATE 文をトリガーの契機とする。ただし、指定した列が更新対象の場合に限る。
SQL> CREATE OR REPLACE trigger01 BEFORE UPDATE OF sal ON emp FOR EACH ROW
  2  BEGIN
  3    INSERT INTO emp_sal_history VALUES (empno, :OLD.sal, CURRENT_TIMESTAMP);
  4  END;
  5  /

トリガーが作成されました。
table
トリガーの対象とする表またはビューの名前を指定する。
FOR EACH ROW
INSERT、UPDATE 又は DELETE が複数の行を更新する場合、それぞれの行に対してトリガーを呼び出す。
sql
トリガーの処理を SQL で記述する。
pl/sql
トリガーの処理を PL/SQL で記述する。以下に示す変数をトリガー内で利用できる。

トリガー変数
SQL :OLD.列名 :NEW.列名
INSERT NULL 更新後の値
UPDATE 更新前の値 更新後の値
DELETE 更新前の値 NULL
SQL> CREATE OR REPLACE trigger01 BEFORE UPDATE ON emp FOR EACH ROW
  2  BEGIN
  3    INSERT INTO emp_history VALUES (:OLD.sal, :OLD.comm, CURRENT_TIMESTAMP);
  4  END;
  5  /

トリガーが作成されました。

権限

自分のスキーマ内の表に対するトリガーを自分のスキーマ内に作成する場合は、CREATE TRIGGER システム権限が必要である。

任意のスキーマ内の表に対するトリガーを任意のスキーマ内に作成する場合は、CREATE ANY TRIGGER システム権限が必要である。

DATABASE に対するトリガーを作成する場合は、さらに ADMINISTER DATABASE TRIGGER システム権限が必要である。

関連記事

ALTER TRIGGER

DROP TRIGGER

ALL_TRIGGERS

DBA_TRIGGERS

USER_TRIGGERS

参考文献

Oracle 2023. CREATE TRIGGER Statement. MySQL 8.0 Reference Manual

The PostgreSQL Global Development Group 2022. CREATE TRIGGER. PostgreSQL 15.0 Document

Microsoft 2023. CREATE TRIGGER (Transact-SQL)