17.00 - 17.05 - 行トリガーと文トリガー - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Release Date
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-170K-JPN
Language
日本語 (日本)

トリガーには、互いに排他的な2つのタイプがあります。 つまり、行トリガーと文トリガーの2つです。 1つのトリガー定義に、行操作と文操作を組み合わせて使用することはできません。

行トリガーおよび文トリガーのどちらもストアド プロシージャを呼び出すことができます(CREATE PROCEDUREおよびREPLACE PROCEDURE(外部形式)およびCREATE PROCEDUREおよびREPLACE PROCEDURE(SQL形式)を参照)。

以下の表に、行トリガーと文トリガーの主な違いをまとめます。

行トリガー 文トリガー
トリガー文によって変更される行ごとに、1回起動します。

トリガー起動のプロセスには、WHEN条件がTRUEの値になるかどうかを検査し、指定の条件の評価がFALSEのときには起動しないという動作も含まれます。

行トリガーが起動する回数には制限がありません。

一度だけ起動します。

文トリガーは、変更された行にはアクセスできません。

トリガー文によって変更された行がない場合は起動しません。 トリガー文によって変更された行がない場合でも起動します。
BEFOREトリガーとAFTERトリガーが可能です。 AFTERトリガーだけが可能です。
REFERENCING句を使用した、任意のOLD値、NEW値または任意のOLD TABLE遷移テーブル、OLD_TABLE遷移テーブル、NEW TABLE遷移テーブルやNEW_TABLE遷移テーブルへのアクセスは、意味があります。

たとえば、OLD [ROW]遷移変数やOLD TABLE遷移テーブルを使用してINSERTを実行しても意味がありません。これは、以前に存在した変数やテーブルがないためです(有効な遷移変数およびテーブルと無効な遷移変数およびテーブルの完全なリストは、以下の表を参照)。

トリガーされるアクション文に対して有効な遷移の詳細は、以下の表を参照してください。

OLD遷移テーブルの名前とNEW遷移テーブルの名前のREFERENCINGオプションは使用できません。使用できるのは、OLD TABLE遷移テーブル、OLD_TABLE遷移テーブル、NEW TABLE遷移テーブルおよびNEW_TABLE遷移テーブルの名前のみです。

トリガーされるアクション文に対して有効な遷移の詳細は、以下の表を参照してください。

OLD_NEW_TABLE遷移テーブルは指定できません。

行トリガーにはOLD_NEW_TABLE遷移テーブルに相当するテーブルがありません。

OLD_NEW_TABLE遷移テーブルが指定できます。

行トリガーまたは文トリガーのどちらを使用してもアプリケーションを記述できる場合、文トリガーを使用すれば、ほとんどの場合、パフォーマンスが改善されます。それは、文トリガーが一度だけ起動するのに対して、同等の行トリガーはトリガー文が更新する各につき一度ずつ起動するためです。

トリガーのタイプ、トリガー起動時間、更新操作および遷移変数と遷移テーブルの有効な組み合わせは、次の表のとおりです。

トリガーのタイプ 起動時間 更新操作 有効な遷移
ROW BEFORE DELETE OLD [ROW]
INSERT NEW [ROW]
MERGE INSERT NEW [ROW]
MERGE UPDATE
  • OLD [ROW]
  • NEW [ROW]
UPDATE
  • OLD [ROW]
  • NEW [ROW]
AFTER DELETE
  • OLD [ROW]
  • OLD_TABLE
  • OLD TABLE
INSERT
  • NEW [ROW]
  • NEW_TABLE
  • NEW TABLE
MERGE INSERT
  • NEW [ROW]
  • NEW_TABLE
  • NEW TABLE
MERGE UPDATE
  • NEW [ROW]
  • NEW_TABLE
  • NEW TABLE
  • OLD [ROW]
  • OLD_TABLE
  • OLD TABLE
UPDATE
  • NEW [ROW]
  • NEW_TABLE
  • NEW TABLE
  • OLD [ROW]
  • OLD_TABLE
  • OLD TABLE
STATEMENT BEFORE 適用なし。

BEFORE STATEMENTトリガーはANSI SQL:2011規格では定義されていません。また、Teradataでもサポートしていません。

サポートされていないトリガー機能を参照してください。

AFTER DELETE
  • OLD_TABLE
  • OLD TABLE
INSERT
  • NEW_TABLE
  • NEW TABLE
MERGE INSERT
  • NEW_TABLE
  • NEW TABLE
MERGE UPDATE
  • NEW_TABLE
  • NEW TABLE
  • OLD_TABLE
  • OLD TABLE
UPDATE
  • NEW_TABLE
  • NEW TABLE
  • OLD_TABLE
  • OLD TABLE
  • OLD_NEW_TABLE