トリガーおよびストアド プロシージャ - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

トリガーされるアクション文から呼び出されるストアド プロシージャには、1つ以上のSQL文を指定できます。有効な文を以下の表にまとめます。

トリガーのタイプ 有効な文
AFTER
  • ROLLBACK
  • SELECT AND CONSUME
  • UPDATE (すべての形式)
  • 有効なSQL文を含むマクロのEXEC
BEFORE
  • SET句(INSERTおよびUPDATE行トリガーのみ)
  • データ変更SQL文を含まないマクロのEXEC

トリガーされる文は、トリガーを起動する文と同じトランザクション内で実行する必要があります。ストアド プロシージャはトランザクションの状態を変更できますが、トリガー本体に含まれる文はトランザクションの状態を変更できません

SQL CALL文を実行しても、トランザクションは開始しません。 トランザクションを開始するのは、ストアド プロシージャ内の最初のSQLリクエストまたは式の実行です。 その後、システムはそれにリクエスト番号、およびトランザクション番号がまだ割り当てられていない場合にはトランザクション番号を割り当てます。 その後、システムはストアド プロシージャ内の各SQLリクエストのリクエスト番号を増分します。 ただし、SQLリクエストのトランザクション番号は、セッション モードおよびCALLリクエストが実行されたトランザクションの状態に依存します。

そのため、以下の文はトリガーから呼び出されるストアド プロシージャの本体内では許可ない

  • すべてのDDL文
  • すべてのDCL文
  • BEGIN TRANSACTIONおよびEND TRANSACTION文
  • すべての例外処理文

    正確には、これは正しくありません。トリガーによって呼び出されるストアド プロシージャは条件ハンドラーを有効に含むことができますが、そのほとんどはプロシージャが呼び出されるときに決して実行されません。トリガー文での最初の失敗により、リクエスト全体がアボートしてロールバックするためです。

一般に、ストアド プロシージャは以下の3つのタイプのパラメータをサポートします。

  • IN
  • OUT
  • INOUT

ただし、トリガーされたアクションでは出力をリクエスト元に返すことができないので、OUTおよびINOUTパラメータはトリガーから呼び出されるストアド プロシージャ内で許可ない

old-values相関名およびnew-values相関名はパラメータとして渡せますが、old-values-table別名、new-values-table別名、またはold-new-table別名は渡せません。