Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » ストアド・プロシージャとトリガ » プロシージャ、トリガ、バッチの使用

 

トリガの概要

トリガとは、データを修正する文が実行されると自動的に実行されるストアド・プロシージャの特別な形式です。トリガは、参照整合性や他の宣言制約では不十分な場合に使います。データ整合性の確保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 はアトミック・オペレーションです。これらがエラーになると、トリガの結果とトリガが起動したプロシージャを含め、その文のすべての結果がキャンセルされます。アトミックな複合文を参照してください。


トリガの作成
トリガの実行
トリガの変更
トリガの削除
トリガを実行するためのパーミッション
トリガに関する詳細情報