- database_name_1
- トリガーが現行ユーザーのデフォルト以外のデータベースで作成されている場合のオプションの修飾子。
- trigger_name
- 作成または置換されるトリガーの名前。
- データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
- trigger_nameは、それが作成されるデータベース内で固有であることが必要です。
- ENABLED
- トリガーの実行を可能にするキーワード。
- ENABLEDはデフォルトです。
- DISABLED
- トリガーの実行を不可にするキーワード。
- 使用不能にされたトリガーの定義は除去されませんが、使用可能にしてからでなければ実行できません(ALTER TRIGGERを参照)。
- BEFORE
- トリガー イベントまたはトリガー文より前にトリガーを実行するように指定します。
- BEFORE行トリガーには、トリガー対象のアクションSQL文としてデータ変更文を定義することはできません。
- BEFORE文トリガーは、どんな場合でも無効です。
- データベースはどちらの場合もエラー メッセージを返します。
- AFTER
- トリガー イベントの後にトリガーが実行されます。
- temporal_option
- これらのオプションの資料については、<Teradata Vantage™ - テンポラル テーブル サポート、B035-1182>を参照してください。
triggering_event
トリガー イベントまたはトリガー文には、INSERT、DELETE、UPDATE、MERGEリクエストのいずれかを指定できます。テンポラル テーブルに対してトリガーする文に適用するルールの資料については、<Teradata Vantage™ - テンポラル テーブル サポート、B035-1182>を参照してください。
- INSERT
- このトリガーのトリガー イベントは、以下のいずれかです:
- INSERT
- INSERT SELECT
- Atomic Upsert
- MERGE
- DELETE
- このトリガーのトリガー イベントはDELETEです。
- UPDATE
- このトリガーのトリガー文は、以下のいずれかです:
- UPDATE
- Atomic Upsert
- MERGE
- 任意の数の行(ゼロ行でもよい)を更新できます。
- column_name
- 列名のセットにある列の名前。
- リスト内の列が更新されると、トリガーが起動します。
- 任意指定で、リストを括弧で囲むこともできます。
- 列名のリストを指定しない場合は、デフォルトですべての列が対象になります。
- リストでは、重複する列名を指定することはできません。
- column_nameリストは、INSERTまたはDELETEトリガー イベントには適用されません。
- database_name_2
- 対象のテーブルに対するオプションの修飾子。
- 対象のテーブルが現在のユーザーのデフォルト以外のデータベースに含まれる場合、この指定は必須です。
- table_name
- このトリガーに関連する対象テーブルの名前。
- table_nameは既存の基本テーブルの名前でなければなりません。
- table_nameが参照するオブジェクトは、以下のいずれにも指定することはできません。
- グローバル一時テーブル
- ハッシュ インデックス
- 結合インデックス
- 再帰ビュー
- キュー テーブル
- トレース テーブル
- ビュー
- 揮発テーブル
- ORDER
ORDER値は、複数のトリガーに同じトリガー アクション時間とトリガー イベントがある場合に、実行シーケンスを決めます。
- 複数のトリガーに同じORDER値、トリガー アクション時間、およびトリガー イベントが指定されている場合、それらは作成のタイムスタンプの順序で実行されます。
- integer
- ORDERに割り当てられる値。
- この値は、32,767以下の正のsmall integerでなければなりません。
- ORDER句が指定されない場合、システムはトリガーにデフォルト値の32,767を割り当てます。
reference
RFERENCING句では、WHEN条件やトリガーで起動されるアクションから、1つ以上の遷移テーブルにある行のセットを参照します。この句はオプションで、デフォルトはありません。
この句のセマンティクスはテンポラル テーブルと非テンポラル テーブルで同じです。
- OLD [ ROW ] [AS] old_transition_variable_name
- 変更前の現在の行(遷移行)の相関名を指定します。
- DELETE、MERGE UPDATE、およびUPDATEイベントのROWトリガーにのみ有効です。
- 正規化Period列は、OLD [ ROW ]に指定できます。
- NEW [ ROW ] [AS] new_transition_variable_name
- 変更後の現在の行(遷移行)の相関名を指定します。
- INSERT、MERGE INSERT、MERGE UPDATE、およびUPDATEイベントのROWトリガーにのみ有効です。
- 正規化Period列は、NEW [ ROW ]に指定できません。
- OLD_TABLE
- OLD TABLE
- 古い値の遷移テーブルのテーブル相関名を指定する同等のキーワード。
- OLD TABLEは、ANSI SQL-2011規格で指定されている形式です。
- OLD_TABLEは、下位互換性のために保持されているTeradata拡張機能です。
- OLD_TABLE参照またはOLD TABLE参照は、文トリガーと行トリガーの両方で指定できます。
- 正規化Period列は、OLD TABLEまたはOLD_TABLEに指定できます。
- OLD_TABLEおよびOLD TABLEが有効なのは、DELETE、MERGE UPDATEおよびUPDATEトリガー イベントだけです。
- old_transition_table_name
- 古い値の遷移テーブルを参照するために、OLD TABLEオプションまたはOLD_TABLEオプションで指定するテーブル別名。
- NEW_TABLE
- NEW TABLE
- 新しい値の遷移テーブルのテーブル相関名を指定する同等のキーワード。
- NEW TABLE は、ANSI SQL:2011規格で指定されている形式です。
- NEW_TABLEは、下位互換性のために保持されているTeradata拡張機能です。
- NEW_TABLE参照またはNEW TABLE参照は、文トリガーと行トリガーの両方で指定できます。
- 正規化Period列は、NEW ROW TABLEまたはNEW_TABLEには指定できません。
- NEW_TABLEおよびNEW TABLEが有効なのは、INSERT、MERGE INSERT、MERGE UPDATEおよびUPDATEトリガー イベントだけです。
- new_transition_table_name
- 新しい値の遷移テーブルを参照するために、NEW TABLEオプションまたはNEW_TABLEオプションで指定するテーブル別名。
- OLD_NEW_TABLE
- 古い値および新しい値の遷移テーブルのテーブル相関名を指定します。
- AFTER UPDATEトリガーには、OLD_NEW_TABLE参照だけを指定できます。
- この句は、NEW TABLE構文およびOLD TABLE構文の文トリガーに対して次の2つの利点を提供します。
- 文トリガーを可能にし、すべての古い値と新しい値を単一行に格納します。
- 遷移テーブルと文トリガー間の自己結合を行なう必要がなくなります。
- 古い値と、影響を受けるすべての行における新しい値を比較するのではなく、古い値と、影響を受ける行におけるこれに対応する新しい値を比較する機能を使用可能にします。
- old_new_table_name
- 同じ行にある古い値と新しい値の遷移テーブルを参照するために、OLD_NEW_TABLEオプションで指定するテーブル別名。
- old_value
- OLD TABLEとNEW TABLEの遷移テーブルの行の特定の古い値の列を参照するときに使用できる列別名。
- new_value
- OLD TABLEとNEW TABLEの遷移テーブルの行にある特定の新しい値の列を参照するときに使用できる列別名。
- FOR EACH ROW
- トリガーが、適格な行ごとに起動します。適格な行とは、トリガーに指定されたWHEN条件がTRUEと評価される行です。
- FOR EACH STATEMENTはデフォルトです。
- FOR EACH STATEMENT
- トリガーのWHEN条件がTRUEと評価されるときは、リクエスト内の処理済みSQL文ごとにトリガーが1度起動します。
- FOR EACH STATEMENTはデフォルトです。
- WHEN (search_condition)
- トリガーの起動条件をさらに詳細化するロジック。
- search_conditionは、トリガー定義の範囲内のアイテム比較に基づいた有効な検索条件を表すブール条件です。トリガーは、search_conditionの値がTRUEの場合にのみ起動します。
- サブクエリー内にない場合、search_conditionの列をold_transition_variable_nameまたはnew_transition_variable_nameのいずれかで修飾する必要があります。例:
CREATE TRIGGER RaiseTrig
AFTER UPDATE OF salary ON employee
REFERENCING OLD AS OldRow NEW AS NewRow
FOR EACH ROW
WHEN ((NewRow.salary - OldRow.salary) / OldRow.salary >.10)
INSERT INTO salary_log
VALUES ('USER', NewRow.name, OldRow.salary, NewRow.salary);
- search_conditionには、サブクエリー内の集計のみを含めることができます。search_conditionからOLD TABLEまたはNEW TABLE遷移テーブルを参照する場合は、述語をサブクエリーとして表現する必要があります。WHEN条件は必ず単一の結果を出力するので、OLD TABLEとNEW TABLE列参照の典型的な使用法は、集約を指定する方法です。
- search_conditionには、UDTの順序が定義されている場合にのみ、UDT比較を含めることができます。CREATE ORDERINGおよびREPLACE ORDERINGを参照してください。
- トリガーが行トリガーの場合、search_conditionは現在の行の行相関名に基づきます。
- search_conditionは、次のそれぞれにつき1度評価されます。
- トリガー文の実行(文トリガーの場合)
- 変更行の入った遷移テーブルの行(行トリガーの場合)
- trigger_action
- ANSI SQL:2011仕様では、複数の文をBEGIN ATOMICキーワードとENDキーワードで囲むことが定められています。Vantageはこれに準拠していますが、複数のSQLプロシージャ文をBEGIN ATOMICキーワードとENDキーワードで囲まないで指定することも可能です。
- SQLプロシージャ文リストの中の各トリガー アクション文は、それぞれセミコロン(;)で終了している必要があります。
- SQLプロシージャ文のリストは、括弧で囲んでも囲まなくても指定できます。
- BTEQでは、SQLプロシージャ文のリストを括弧で囲まない場合、各文の直後の行は次の規則に従う必要があります。
- 前の行を終了するセミコロン文字で始まる必要があります。
- リスト内で次にトリガーされるアクション文を指定する必要があります。
- UDT式はトリガーされるSQL文内で有効です。
- トリガーされるSQL文のテンポラル テーブルでの使用法の詳細と使用例については、<Teradata Vantage™ - テンポラル テーブル サポート、B035-1182>を参照してください。
- BEGIN ATOMIC
- 複数のトリガー アクション文を指定するキーワード。
- トリガーされるSQL文の句の先頭にBEGIN ATOMICを指定した場合には、ENDキーワードでそれを終了する必要があります。
- SQL_procedure_statement
- 1つ以上の有効なトリガーされるアクション文。
- END
- BEGIN ATOMICキーワードによって開始する文ブロックを終了するためのキーワード。
- BEGIN ATOMICを使用した場合には、トリガーされるSQL文の句を終了するために、ENDを指定する必要があります。