ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
トリガー(TRIGGER)
スポンサード リンク

トリガーの構文
CREATE OR REPLACE TRIGGER トリガー名
 { BEFORE | AFTER }
 { INSERT OR UPDATE OR DELETE }
 ON 表1
 [ FOR EACH ROW ]
 { AS | IS }

  /* 宣言セクション */
BEGIN
  /* 実行可能セクション */
EXCEPTION
  /* 例外セクション */
END [トリガー名];

表1が更新されたタイミングでBEGINセクションの処理が実効されます。

●起動タイミング
  BEFORE : 表1が更新される前にトリガーが起動される。
  AFTER  : 表1が更新された後にトリガーが起動される。

●トリガーイベント文
  INSERT : 表1に、INSERT処理が実効されたタイミングでトリガーが起動される。
  UPDATE : 表1に、UPDATE処理が実効されたタイミングでトリガーが起動される。
  DELETE : 表1に、DELETE処理が実効されたタイミングでトリガーが起動される。

●行トリガー/文トリガー
  「 FOR EACH ROW 」キーワードが付いてる場合は行トリガー。付いてない場合は文トリガーとなる。
    行トリガー : 更新対象の1レコードにつき1回トリガーが起動される。3行更新された場合は、
             3回起動される。
    文トリガー : 対象のテーブルが更新されると、1回だけ起動される。



スポンサード リンク


例1) 表「emp」のトリガー「sample_tri」の実効条件は、以下のようになる。
       起動タイミング : DB更新前にトリガー起動
       トリガーイベント : INSERT または UPDATE または DELETE
       文トリガー
create or replace trigger sample_tri
 before delete or insert or update
 on emp

begin

 dbms_output.put_line('更新!!');

end sample_tri; 


例2) 表「emp」のトリガー「sample_tri」の実効条件は、以下のようになる。
       起動タイミング : DB更新後にトリガー起動
       トリガーイベント : UPDATE
       行トリガー
create or replace trigger sample_tri
 before update
 on emp
 for each row

begin

 dbms_output.put_line('-------------------------');

 -- 変更対象レコードのキー項目「EMP_ID」の値を表示
 dbms_output.put_line('EMP_ID:' || :old.emp_id);

 -- 変更前の項目「salary」の値を表示
 dbms_output.put_line('変更前データ:' || to_char(:old.salary));

 -- 変更後の項目「salary」の値を表示
 dbms_output.put_line('変更後データ:' || to_char(:new.salary));

end sample_tri; 

更新前の、表「emp」のデータ
SQL> select * from emp;

EMP DEP NAME        SALARY
--- --- ---------- -------
E01 D01 なまえ1       100
E03 D02 なまえ3       300
E04 D05 なまえ4       200

表「emp」を更新して、例2のトリガーを起動する。
SQL> update emp set salary = 500 where salary >= 200;
-------------------------
EMP_ID:E03
変更前データ:300
変更後データ:500
-------------------------
EMP_ID:E04
変更前データ:200
変更後データ:500

2行が更新されました。

SQL>
SQL> select * from emp;

EMP DEP NAME           SALARY
--- --- ---------- ----------
E01 D01 なまえ1          100
E03 D02 なまえ3          500
E04 D05 なまえ4          500

スポンサード リンク


無名ブロック
ストアドプロシージャ(PROCEDURE)
ストアドファンクション(FUNCTION)
ストアドパッケージ(PACKAGE)
トリガー(TRIGGER)
PL/SQLのデータ型
PL/SQLの演算子(計算、代入、結合、連結、指数、比較)
PL/SQLの変数と定数
%TYPE属性と%ROWTYPE属性
PL/SQLの組み込み関数
PL/SQLの実行権限(AUTHID)
PL/SQLを独立したトランザクションで実行する

PL/SQL へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ