【DB2逆引きリファレンス目次】 【DB2逆引きリファレンス目次#実装編】 【DB2逆引きリファレンス目次#その他のオブジェクト】
前提
- データベース接続が必要
- 以下のいずれかが必要: SYSADM権限, DBADM権限, BEFOREまたはAFTERトリガーを作成する表に対するCONTROL特権, INSTEAD OFトリガーを作成するビューに対するALTER特権, スキーマに対するALTERIN特権
- INSTEAD OFトリガーを作成する場合は、ビューの定義者であればよい
解説
トリガーを作成するには、CREATE TRIGGERを用いる。
CREATE TRIGGER トリガー名
トリガー種別 トリガーとなる更新 [REFERENCING 参照名指定 ]
[ 実行タイミング MODE DB2SQL] [WHEN ( トリガー条件 )] トリガーアクション
トリガー名
: 作成するトリガーの名前を指定します。
トリガー種別
: 作成するトリガーの種別を以下のいずれかで指定します。
NO CASCADE BEFORE
: 表に対する更新を反映する前に実行するトリガーを作成します。
AFTER
: 表に対する更新を反映した後に実行するトリガーを作成します。
INSTEAD OF
: ビューに対する更新の変わりに実行するトリガーを作成します。
トリガーとなる更新
: トリガーとなる更新の種別を以下のいずれかで指定します。
- INSERT ON 表またはビュー名
- DELETE ON 表またはビュー名
- UPDATE ON [OF 列名 ] 表またはビュー名
REFERENCING 参照名指定
: トリガーアクションから表および行を参照する場合の参照名を以下の形式で指定します。 複数指定する必要がある場合は、空白で区切って並べます。
OLD AS 参照名
: 更新前の行を参照するための名前を指定します。
NEW AS 参照名
: 更新後の行を参照するための名前を指定します。
OLD_TABLE AS 参照名
: 更新前の表を参照するための名前を指定します。
NEW_TABLE AS 参照名
: 更新後の行を参照するための名前を指定します。
実行タイミング MODE DB2SQL
: トリガーアクションを実行するタイミングを指定します。
FOR EACH ROW
: 更新対象の表または行の各行後に、トリガーアクションを毎回実行します。
FOR EACH STATEMENT
: トリガーアクションがステートメント全体で一度だけ実行します。AFTERトリガーでのみ指定できます。
WHEN ( トリガー条件 )
: トリガーを実行する条件を指定します。省略した場合はトリガーが必ず実行されます。
トリガーアクション
: トリガーとして実行するSQLプロシージャを指定します。
使用例
表(employee)の更新(INSERT)時のAFTERトリガー(ここではtrigger1)を作成する例。
db2 ==> CREATE TRIGGER trigger1 AFTER INSERT ON employee
REFERENCING NEW AS newemp
FOR EACH ROW MODE DB2SQL
UPDATE department SET numemp = numemp + 1 WHERE deptno = newemp.workdept↓
employee表に新しい行(従業員)が挿入されるたびに、部署(department表)の人数(numemp)の数をひとつ増やします。 表(employee)の更新(UPDATE)時のAFTERトリガー(ここではtrigger2)を作成する例。
db2 ==> CREATE TRIGGER trigger2 AFTER UPDATE ON employee
REFERENCING NEW AS newemp OLD AS oldemp
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
UPDATE department SET numemp = numemp + 1 WHERE deptno = newemp.workdept;
UPDATE department SET numemp = numemp - 1 WHERE deptno = oldemp.workdept;
END↓
employee表の行(従業員)の情報が変更されるたびに、部署(department表)の人数(numemp)の数を更新します。