MERGE文のTeradata実装でのANSIへの完全準拠に対する5つの例外は、次のとおりです。
- ANSIでは、この文はMERGE INTOとして定義されていますが、Teradataの定義はMERGEで、INTOはオプションのキーワードです。
- MERGEのTeradata実装では、INSERT指定でANSI OVERRIDE句をサポートしません。
MERGE文のANSI定義では、この句は、識別列だけに適用され、ユーザー指定の識別値またはシステム生成の識別値のオーバーライドを許可します。Teradataでは、エラー ロギングを実行しない通常のMERGE文でもこの操作をサポートしません。
- MERGEを使用してプライマリ インデックスの列値を更新または削除できません。
- ONキーワードで指定するmatch_conditionは、ターゲット テーブルのプライマリ インデックスに関する等価制約を指定しなければなりません。ターゲット テーブルは、NoPIテーブルまたは列パーティション テーブルにはできません
- 不等条件は無効です。ターゲット テーブルのプライマリ インデックスの列セット以外の列セットに指定された条件も無効です。
- 指定されたプライマリ インデックスの値は、INSERT句に指定された列値が暗黙に示すプライマリ インデックスの値に一致する必要があります。
- match_conditionには、ソース テーブルまたはターゲット テーブルに属さない列に対するサブクエリーと参照を入れることができません。
- match_conditionは、明示的にNULLと同等に扱うことができません。
- プライマリ インデックスの値が式の結果の場合、その式はターゲット テーブルのどの列も参照できません。
- ターゲット テーブルが行パーティション テーブルの場合、パーティション列の値もmatch_conditionに指定し、INSERT句にmatch_conditionと同じパーティション列の値を指定する必要があります。
- MERGE操作でソース行が複数の場合、ターゲット テーブルに定義されているトリガーの起動順序は、MERGEリクエストのUPDATEおよびINSERTコンポーネントの順序によって決まります。これは、MERGE操作の結果に影響する可能性があります。INSERTコンポーネントの前にUPDATEコンポーネントを指定した場合、処理順序は次のようになります。
- BEFORE UPDATEトリガー
- BEFORE INSERTトリガー
- MERGE UPDATE操作およびMERGE INSERT操作
- AFTER UPDATEトリガー
- AFTER INSERTトリガー
UPDATE指定の前にINSERT指定を配置した場合、処理順序は次のようになります。- BEFORE INSERTトリガー
- BEFORE UPDATEトリガー
- MERGE INSERT操作およびMERGE UPDATE操作
- AFTER INSERTトリガー
- AFTER UPDATEトリガー