トリガとは、データを修正する文が実行されると自動的に実行されるストアド・プロシージャの特別な形式です。トリガは、参照整合性や他の宣言制約では不十分な場合に使います。データ整合性の確保とCREATE TABLE 文を参照してください。
検査項目を細かく設定して複雑な参照整合性を設定したり、既存のデータは制約の範囲から外れても許可するが新しいデータはチェックしたりする場合があります。トリガはこのようなときに使用すると便利です。また、データベースにアクセスするアプリケーションとは個別に、データベース・テーブルのアクティビティのログを取るときにもトリガを使います。
その後のトリガが起動しない LOAD TABLE、TRUNCATE、WRITETEXT の 3 つの特別な文があります。LOAD TABLE 文、TRUNCATE 文、WRITETEXT 文 [T-SQL]を参照してください。
トリガは、関連するテーブルまたはビューの所有者のパーミッションによって実行されます。そのトリガを起動したユーザの ID ではありません。トリガはユーザが直接変更できないテーブルのローを変更できます。
トリガが起動しないようにするには、-gf サーバ・オプションを指定するか、または fire_triggers オプションを設定します。次の項を参照してください。
SQL Anywhere では、次のトリガのタイプがサポートされています。
BEFORE トリガ BEFORE トリガは、トリガ元アクションが実行される前に実行されます。BEFORE トリガはテーブルに定義できますが、ビューには定義できません。
AFTER トリガ AFTER トリガは、トリガ元アクションが完了した後に実行されます。AFTER トリガはテーブルに定義できますが、ビューには定義できません。
INSTEAD OF トリガ INSTEAD OF トリガは、トリガ元アクションの代わりに実行される条件付きのトリガです。INSTEAD OF トリガはテーブルとビューに定義できます (マテリアライズド・ビューを除く)。INSTEAD OF トリガを参照してください。
トリガを定義する構文の詳細については、CREATE TRIGGER 文を参照してください。
トリガを起動するイベントのリストを次に示します。
動作 | 説明 |
---|---|
INSERT | トリガの関連するテーブルに新しいローが挿入されたときに、トリガが起動される。 |
DELETE | トリガの関連するテーブル内のローが削除されたときに、トリガが起動される。 |
UPDATE | トリガの関連するテーブル内のローが更新されたときに、トリガが起動される。 |
UPDATE OF column-list | トリガの関連するテーブル内のローが、column-list 中のカラムが変更されるなどして更新されたときに、トリガが起動される。 |
処理が必要なイベントごとにトリガを個別に作成できます。または、共有するアクションや、イベントに応じたアクションが複数ある場合は、すべてのイベントに対して 1 つのトリガを作成し、IF 文を使用して実行するアクションを区別できます。トリガ・オペレーション条件を参照してください。
トリガのレベルには、「ロー・レベル」と「文レベル」があります。
ロー・レベル・トリガは、変更されるローごとに一回実行されます。ロー・レベル・トリガは、ローの変更前または変更後に実行されます。
対象ローの新しいイメージと古いイメージのカラム値は、変数によってトリガから使用可能になります。
文レベル・トリガは、トリガする文全体の処理が完了した後に実行されます。トリガする文の対象ローは、ローの新しいイメージと古いイメージを表すテンポラリ・テーブルによってトリガから使用可能になります。SQL Anywhere では、文レベル BEFORE トリガはサポートされていません。
トリガ実行のタイミングは柔軟に設定できるので、実行に応じてカスケード更新または削除の実行が決まるような、参照整合性に依存するトリガに対して有効です。
トリガの実行中にエラーが発生すると、トリガを起動した操作そのものがエラーになります。INSERT、UPDATE、DELETE はアトミック・オペレーションです。これらがエラーになると、トリガの結果とトリガが起動したプロシージャを含め、その文のすべての結果がキャンセルされます。アトミックな複合文を参照してください。
トリガの作成
トリガの実行
トリガの変更
トリガの削除
トリガを実行するためのパーミッション
トリガに関する詳細情報
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |