CREATE TRIGGERおよびREPLACE TRIGGERの構文要素 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/ncd1596241368722.ditamap
dita:ditavalPath
ja-JP/ncd1596241368722.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage
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 ]
現在の行が変更される前の相関名の前に指定するキーワード。現在の行は遷移行と呼ばれます。ROWキーワードはオプションです。
OLDまたはOLD ROWを指定できるのは、ROWトリガーだけです。
正規化Period列は、OLDまたはOLD ROWに指定できます。
OLDおよびOLD ROWが有効なのは、DELETE、MERGE UPDATEおよびUPDATEトリガー イベントだけです。
old_transition_variable_name
OLDオプションまたはOLD ROWオプションを使用して指定する行別名で、遷移テーブルの現在の行の古い値を参照するために使用します。
old_transition_variable_nameの前にASキーワードを入れるかどうかはオプションです。
NEW [ ROW ]
現在の行が変更された後の相関名の前に指定するキーワード。現在の行は遷移行と呼ばれます。ROWキーワードはオプションです。
NEWまたはNEW ROWを指定できるのは、ROWトリガーだけです。
正規化Period列は、NEWまたはNEW ROWには指定できません。
NEWおよびNEW ROWが有効なのは、INSERT、MERGE INSERT、MERGE UPDATEおよびUPDATEトリガー イベントだけです。
AS new_transition_variable_name
NEWオプションまたは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は、トリガー定義の範囲内での項目の比較に基づく有効な検索条件です。 UDTに順序付けが定義されていれば、検索条件にはUDT比較が組み込まれます。 CREATE ORDERINGおよびREPLACE ORDERINGを参照してください。
トリガーが行トリガーの場合、search_conditionは現在の行の行相関名に基づきます。
search_conditionがsubqueryを指定する場合、この条件に集約を含めることができます。それ以外の場合は、WHEN句検索条件指定の一部としては集約は無効です。
WHEN句検索条件からOLD TABLEまたはNEW TABLE遷移テーブルを参照する場合に、述部をsubqueryとして表現する必要があるので、このことは重要です。WHEN条件は必ず単一の結果を出力するので、OLD TABLEとNEW TABLE列参照の典型的な使用法は、集約を指定する方法です。
ブール条件。評価がTRUEまたはFALSEにならない式は、検索条件またはカーソル名のいずれとしても無効です。
search_conditionは、次のそれぞれにつき1度評価されます。
  • トリガー文の実行(文トリガーの場合)
  • 変更行の入った遷移テーブルの行(行トリガーの場合)
トリガーされるアクションが実行されるかどうかは、以下の表に示すように、検索条件結果の評価に依存します。
search_conditionの評価 文または行
TRUE トリガーされるアクションの起動に関して適格であるとみなされます。
FALSE トリガーされるアクションの起動に関して適格であるとみなされません。
UNKNOWN トリガーされるアクションの起動に関して適格であるとみなされません。
trigger_action
ANSI SQL:2011仕様では、複数の文をBEGIN ATOMICキーワードとENDキーワードで囲むことが定められています。Vantageはこれに準拠していますが、複数のSQLプロシージャ文をBEGIN ATOMICキーワードとENDキーワードで囲まないで指定することも可能です。
SQLプロシージャ文リストの中の各トリガー アクション文は、それぞれセミコロン(;)で終了している必要があります。
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を指定する必要があります。