17.05 - MERGE - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

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

ターゲット行とソース行とが指定のマッチング条件を満たすかどうかに基づいて、ソース行セットをプライマリ インデックスのあるターゲット テーブルに併合します。ターゲット テーブルは列パーティション化できません。

ソース行とターゲット行 併合操作
マッチング条件を満たす WHEN MATCHED THEN UPDATE句に基づいて更新する
WHEN MATCHED THEN DELETE句に基づいて削除する
マッチング条件を満たさない WHEN NOT MATCHED THEN INSERT句に基づいて挿入する

MERGEのテンポラル形式の詳細について、<Teradata Vantage™ - テンポラル テーブル サポート、B035-1182>を参照してください。

詳細については、以下を参照してください。
  • INSERT/INSERT … SELECT
  • UPDATE
  • UPDATE (Upsert形式)
  • Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144のエラー テーブルの作成およびエラー テーブルのヘルプ
  • Teradata Vantage™ - テンポラル テーブル サポート、B035-1182
  • Teradata Vantage™ - データベースの管理、B035-1093
  • Teradata Vantage™ - データベース ユーティリティ、B035-1102
  • Teradata® FastLoadリファレンス、B035-2411
  • Teradata® MultiLoadリファレンス、B035-2409
  • Teradata® Parallel Data Pumpリファレンス、B035-3021

ANSI準拠

MERGEは、ANSI SQL:2011に準拠しています。

ANSIでは、この文はMERGE INTOとして定義されていますが、Teradataの定義では、INTOはオプションのキーワードです。

MERGE文のTeradata実装でのANSIへの完全準拠に対する例外は、次のとおりです。
  • 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コンポーネントを指定した場合、処理順序は次のようになります。
    1. BEFORE UPDATEトリガー
    2. BEFORE INSERTトリガー
    3. MERGE UPDATE操作およびMERGE INSERT操作
    4. AFTER UPDATEトリガー
    5. AFTER INSERTトリガー
    UPDATE指定の前にINSERT指定を配置した場合、処理順序は次のようになります。
    1. BEFORE INSERTトリガー
    2. BEFORE UPDATEトリガー
    3. MERGE INSERT操作およびMERGE UPDATE操作
    4. AFTER INSERTトリガー
    5. AFTER UPDATEトリガー

必要な権限

MERGEの実行に必要な権限は、実行するリクエストの併合マッチングの句に依存します。

併合マッチングの句 必要な権限
WHEN MATCHED UPDATE SETセット句リストで指定されたtarget_tableのすべての列でのUPDATE。

DELETE SETセット句リストで指定されたtarget_tableのすべての列でのDELETE。

WHEN NOT MATCHED target_table。

INSERT権限は、INSERT列リストで指定されたすべての列でも必要です。

に対するINSERT権限
両方
  • USING サブクエリーで指定されたソース テーブルでのSELECT。
  • WHEN MATCHED句およびWHEN NOT MATCHED句に必要な更新権限および挿入権限のすべて。

注:DELETEをMERGE文でINSERTまたはUPDATEと組み合わせることはできません。

MERGE ... LOGGING ERRORS操作に必要な権限は、LOGGING ERRORSオプションを指定しないMERGE操作に必要な権限と同じです。ただし、MERGE操作のターゲット データ テーブルに関連付けられているエラー テーブルに対するINSERT権限が必要です。