トリガーは、指定した基礎表またはタイプ付き表に対する INSERT、 UPDATE、DELETE 文節と一緒に実行される一連のアクション、 またはそれらの文節によってトリガー起動される一連のアクションを定義するものです。 トリガーは、たとえば次のような目的で使います。
トリガーにニックネームを使用することはできません。
トリガーを使えば、一般的な保全規則や業務規則をサポートできます。 たとえば、トリガーによって、注文に応じる前に顧客のクレジット限度を調べたり、 要約データ表を更新したりできます。
トリガーを使うことの利点は、次のとおりです。
コントロール・センターを使用してトリガーを作成するには、以下のようにします。
|
コマンド行を使用してトリガーを作成するには、以下のように入力します。
CREATE TRIGGER <name> <action> ON <table_name> <operation> <triggered_action>
次の SQL ステートメントは、新人が採用されるたびに従業員の数を増やすトリガーが作成されます。 これによって、EMPLOYEE 表に行が追加されるたびに、 COMPANY_STATS 表の従業員数 (NBEMP) 列に 1 が加算されます。
CREATE TRIGGER NEW_HIRED AFTER INSERT ON EMPLOYEE FOR EACH ROW MODE DB2SQL UPDATE COMPANY_STATS SET NBEMP = NBEMP+1;
トリガー本体には、INSERT、探索 UPDATE、探索 DELETE、全選択、SET 変位変数、 および SIGNAL SQLSTATE のうちの 1 つ以上の SQL ステートメントを含めることができます。 トリガーは、それが参照する INSERT、 UPDATE、または DELETE ステートメントの前または後に起動できます。 CREATE TRIGGER ステートメントの構文に関する完全な情報については、 SQL 解説書 を参照してください。 トリガーの作成および使用についての詳細は、アプリケーション開発の手引き を参照してください。
注: | BEFORE トリガーの場合は、 識別列以外の生成列の列名を、 トリガー・アクションによって指定することはできません。 したがって、生成される識別値は BEFORE トリガーに認識されます。 |
他のオブジェクトに対するトリガーの従属関係は、 すべて SYSCAT.TRIGDEP カタログに記録されます。 トリガーはさまざまなオブジェクトに従属する可能性があります。 これらのオブジェクトと従属のトリガーについては、 SQL 解説書 の DROP ステートメントの説明で詳細に説明されています。
これらのオブジェクトのどれかを除去すると、トリガーは機能しなくなりますが、 その定義はカタログ内に残ります。 そのトリガーを再び有効にするには、カタログからその定義を取り出し、 新しい CREATE TRIGGER ステートメントを実行依頼してください。
トリガーを除去すると、その定義は SYSCAT.TRIGGERS カタログ視点から削除され、 その従属関係もすべて SYSCAT.TRIGDEP カタログ視点から削除されます。 トリガーに UPDATE、INSERT、または DELETE 従属性のあるパッケージは、 すべて無効になります。
従属オブジェクトが視点で、それが作動不能になっている場合は、 トリガーにも作動不能のマークが付けられます。 作動不能のマークが付けられたトリガーに従属するパッケージがあれば、すべて無効にされます。 (詳細については、オブジェクトを変更する場合のステートメントの従属関係を参照してください。)