データベーストリガーとは
データベーストリガーとは、データベースの表に対して何らかのアクション(挿入、更新、削除)が行われた場合に呼び出される処理の事を言います。
データベースの変更に合わせて、定型的な処理を行う必要がある場合に利用します。
例えば、複数のテーブルを同期させる場合などに利用すると便利でしょう。
PL/SQLにてデータベーストリガーを作成する
PL/SQLにてデータベーストリガーを作成するのは、ストアドファンクションやストアドプロシージャを作成する場合とさほど変わりはありません。以下のようなコードで作成することが出来ます。
CREATE OR REPLACE TRIGGER [トリガー名]
[タイミング] [処理] ON [表名] FOR EACH ROW
BEGIN
[処理]
END;
[タイミング]
|
BEFORE
|
[処理]の前にトリガーを実行する設定です。
|
AFTER
|
[処理]の後にトリガーを実行する設定です。
|
[処理]
|
INSERT
|
行が追加された時にトリガーを実行する設定です。
|
UPDATE
|
行が更新された時にトリガーを実行する設定です。
|
DELETE
|
行が削除された時にトリガーを実行する設定です。
|
[表名]
|
任意の表名
|
[タイミング]で指定されたタイミングで、[処理]を行う対象の表を指定します。
|
[処理]
|
任意の処理
|
処理の実態を記述します。
|
特殊な変数
データベーストリガーでは表に変更があった場合に処理が発生する為、変更する前後のデータを取得する手段が必要です。
それらを取得する為に特殊な変数が用意されています。
その変数を利用して、変更の前後のデータを比較して処理を実行することが出来ます。
:new
|
処理の後のレコードオブジェクトを表します。
例えば「:new.code」のようにテーブルの列の値を取得することが出来ます。
|
:old
|
処理の前のレコードオブジェクトを表します。
|
注意点
データベーストリガーを表に設定する際に注意しなければいけない点が幾つかあります。
一つはデータベーストリガーにて他の表を更新する際、その表にトリガーが存在すると無限ループする可能性がある点です。
異なる表をお互いにトリガーで更新するような処理は控えましょう。
また、データベーストリガーを多用する場合は、取り扱いに注意しましょう。
クライアントプログラムでテーブルに更新をかけた場合に、思わぬ結果をもたらす事があります。