C プログラム・オブジェクトはかつて ILE C コンパイラーが必要だというマイナス面を持っていましたが、V5R1 ではプロシージャー、関数、トリガーに関するその要件はなくなりました。SQL
トリガーを実行するのに余分なライセンス製品は必要ありません。SQL トリガーを作成するには、iSeries ライセンス製品の DB2 UDB
Query マネージャーと SQL Development Kit をインストールする必要があります。
前述のように複数のトリガーは同じトリガー・イベントとトリガー時間を持つことができます。標準では before SQL トリガーでは、トリガー・ロジックによるデータ変更はできません。SQL
標準により before トリガーは別の before トリガーを起動できないためです。その活動化は NO CASCADE 節で回避できます。したがってデータ変更ステートメント
(INSERT、UPDATE、DELETE、CREATE) は Before トリガーでは使用できません。
外部トリガーのように、CREATE TRIGGER ステートメントで生成された C プログラムをデバッグしたい場合は、トリガー定義に SET
OPTION DBGVIEW=*STMT を指定して、DB2 UDB にデバッグ可能な生成済み C プログラム・オブジェクトを作成させます。他の
SET OPTION バリエーションも使用できますが、SQL リファレンス・ガイドを参照することをお勧めします。
SQL トリガー WHEN 節により、トリガー・ロジックを条件付きで実行できます。海外注文などのみで必要な特殊な処理をする場合、WHEN
(n.country<>'USA') などの WHEN 節を使用すれば、オーダー表に挿入するたびにトリガーを起動しなくても、条件付きでトリガーを起動できます。
[SQL0723] SQL trigger SALARYCHECK in MYSCHEMA failed with SQLCODE -438
SQLSTATE SA001
トランザクション分離機能とリカバリー
すべてのトリガーは起動時に、分離レベルをトリガーしているアプリケーションと同じ分離レベルに設定します。トリガー内に SET TRANSACTION
ステートメントを置くことでこの分離レベルをオーバーライドできます。
アプリケーションとトリガーを異なる分離レベルで実行する場合はよく考えてから行ってください。とりわけアプリケーションがコミットメント制御で実行され、トリガーがそうでない場合、またその逆の状況を避ける必要があります。こうしたミスマッチした状態でコミットメント制御を使用することにより、アプリケーションおよびトリガー両方で行われたデータベースの変更内容をリカバリーすることが難しくなります。アプリケーションとトリガー両方が
No Commit 以外の分離レベルで実行している場合は、トリガーしているアプリケーションがコミットまたはロールバックを発行するたびに、トリガー変更がコミットまたはロールバックされます。他のコミットメント制御の組み合わせもサポートされていますが、お勧めできません。