CREATE TRIGGER 文を使用して、データベースに格納されるトリガーを定義して名前を付けます。

構文

新しいトリガーを定義します。

CREATE TRIGGER

概要

CREATE [ OR REPLACE ] TRIGGER name
  { BEFORE | AFTER | INSTEAD OF }
  {INSERT | UPDATE | DELETE}
      [ OR { INSERT | UPDATE | DELETE } ] [, ...]
    ON table
  [ REFERENCING { OLD AS old | NEW AS new } ...]
  [ FOR EACH ROW ]
  [ WHEN condition ]
  [ DECLARE
      [ PRAGMA AUTONOMOUS_TRANSACTION; ]
      declaration; [, ...] ]
    BEGIN
      statement; [, ...]
  [ EXCEPTION
    { WHEN exception [ OR exception ] [...] THEN
        statement; [, ...] } [, ...]
  ]
    END

説明

CREATE TRIGGER は新しいトリガーを定義します。 CREATE OR REPLACE TRIGGER は、トリガーを作成するか、既存の定義を置き換えます。

CREATE TRIGGER 文を使用してトリガーを作成する場合、新しいトリガーの名前は、同じテーブルで定義されている既存のトリガーと一致してはなりません。 新しいトリガーは、トリガーイベントが定義されているテーブルと同じスキーマに作成されます。

既存のトリガーの定義を更新する場合は、CREATE OR REPLACE TRIGGER 文を使用します。

Oracle データベースと互換性のある構文を使用してトリガーを作成すると、トリガーは SECURITY DEFINER 関数として実行されます。

パラメーター

パラメーター 説明
name 作成するトリガーの名前を指定します。
BEFORE | AFTER トリガーがトリガーイベントの前または後に発生するかどうかを決定します。
INSERT | UPDATE | DELETE トリガーイベントを定義します。
table トリガーイベントが発生するテーブルまたはビューの名前。
condition トリガーが実際に実行されるかどうかを決定するブール式。 条件が TRUE と評価された場合、トリガーが実行されます。

トリガー定義に FOR EACH ROW キーワードが含まれている場合、OLD.column_name または NEW.column_name をそれぞれ書き込んだ後、WHEN 句は古い行の値または新しい行の値、あるいはその両方の列を参照できます。 INSERT トリガーは OLD を参照できず、DELETE トリガーは NEW を参照できません。

トリガーにキーワード INSTEAD OF が含まれている場合、WHEN 句が含まれていない可能性があります。

WHEN 句にサブクエリを含めることはできません。

REFERENCING { OLD AS old | NEW AS new } ... REFERENCING 句は古い行と新しい行を参照するためのものですが、old は、old という名前の識別子、またはすべて小文字で保存された同等の識別子でのみ置き換えることができます (例:REFERENCING OLD AS old、REFERENCING OLD AS OLD、REFERENCING OLD AS "old")。 また、new は、new という名前の識別子、またはすべて小文字で保存された同等の識別子でのみ置き換えることができます (例:REFERENCING NEW AS new、REFERENCING NEW AS NEW、REFERENCING NEW AS "new")。

REFERENCING 句では、OLD AS old と NEW AS new の一方または両方の句を指定できます (例:REFERENCING NEW AS New OLD AS Old)。

この句は、old または new 識別子以外の識別子を使用できないという点で、Oracle データベースと互換性がありません。

FOR EACH ROW トリガーを実行するイベントの影響を受けるそれぞれの行に対して 1 回実行するか、SQL 文ごとに 1 回のみ実行するかを決定します。 これが指定されている場合、トリガーは影響を受けるそれぞれの行に対して 1 回実行されます (行レベルのトリガー)。 それ以外の場合、トリガーは文レベルのトリガーです。
PRAGMA AUTONOMOUS_TRANSACTION トリガーを自律型トランザクションとして設定するディレクティブ。
declaration 変数、型、REF CURSOR、またはサブプログラム宣言。 サブプログラム宣言が含まれている場合は、他のすべての変数、型、および REF CURSOR 宣言の後に宣言する必要があります。
statement 構造化プロセス言語 (SPL) プログラム文。 DECLARE - BEGIN - END ブロックは SPL 文と見なされることに注意してください。 したがって、トリガー本体にネストされたブロックが含まれる場合があります。
exception NO_DATA_FOUND や OTHERS などの例外条件の名前。