MERGE構文 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/vjt1596846980081.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage
MERGE [ with_isolated_loading ] [ INTO ] target_table [ [AS] correlation_name ]

  USING { { VALUES ( using_expression [,...] ) |
            ( subquery )
          } [AS] source_table_name |

          source_table_name [AS] correlation_name
        } [ ( column_name [,...] ) ]

  ON match_condition { when_matched [ when_not_matched ] | when_not_matched }

  [ LOGGING [ALL] ERRORS [ WITH { NO LIMIT | LIMIT OF error_limit } ] ] [;]
when_matchedwhen_not_matchedは、逆の順序で指定できます。

構文要素

with_isolated_loading
WITH [NO] [CONCURRENT] ISOLATED LOADING
target_table
以下を実行する基本データ テーブル、グローバル一時テーブル、揮発テーブル、またはキュー テーブルを指定します。
  • 行の更新または行の削除
  • 行の挿入
ターゲット テーブルにはプライマリ インデックスがなければならず、行パーティション化できますが、列パーティション化はできません。
correlation_name
using_expressionsubquery、またはsource_table_nameで指定されたソース テーブルの任意指定の相関名を指定します。
using_expression
using_expression値のリストとして併合のためのソース テーブル行を指定する、テーブル式の列を定義する式を指定します。
ソース テーブル行を表わすテーブル式は、using_expression値のカンマ区切りのリストから成ります。それは単一値の式ではありません。
using_expressionは、以下のいずれをも参照できます。
  • 定数
  • 組み込み関数。詳細については、Teradata Vantage™ - SQL関数、式、および述部、B035-1145を参照してください。
  • USINGリクエスト修飾子の変数
  • マクロ パラメータ
  • ストアド プロシージャ パラメータ
  • ホスト変数
  • 文字列リテラル
  • MERGE操作のターゲット テーブル

    例えば、ターゲット テーブルをソース テーブルとして使用できますが、この場合、ターゲット テーブルは、MERGE操作によってターゲット テーブルが更新される前の行データを含んだ別のインスタンス テーブルになります(例: ターゲット テーブルをソース テーブルとして使用を参照)。

using_expressionでは、他の基本テーブルの列を参照できません。
subquery
併合のためのソース テーブルを指定するsubqueryのテーブル式を指定します。
ホスト変数はsubqueryのWHERE句に指定できますが、選択リストには指定できません
すべてのホスト変数はコロン文字で始まらなければなりません。
subqueryが行を戻さない場合、ソース テーブルは空で、トリガーは起動されず(トリガーするアクションとしてのMERGEを参照)、マージ操作はtarget_tableに対する更新操作も挿入操作も行ないません。
subqueryは、以下のいずれをも参照できます。
  • 問合わせ先のテーブルの行
  • 定数
  • USINGリクエスト修飾子の変数
subqueryはORDER BY句を指定できません。
単体の選択を保証するために、subqueryのWHERE句には、問合わせ先のテーブルのUPIまたはUSIに関する等価条件が含まれていなければなりません。
source_table_name
target_tableに併合するソース テーブルの名前を指定します。
column_name
対応するusing_expressionまたはsubquery選択リスト式、またはsource_table_nameによって定義される、ソース行列に使用する任意指定の名前を指定します。
列名を指定しない場合、MERGEは、USING句のusing_expressionまたはsubqueryに指定された列名を使用します。
source_table_nameによって修飾されるソース行列は、match_conditionupdate_expression、またはinsert_expressionで参照できます。
match_condition
ソース行とターゲット テーブル内の指定の行とがマッチするかどうかを判別する条件式を指定します。いずれかのターゲット行で条件が満たされる場合、WHEN MATCHED句が指定されていれば、マッチするターゲット行は更新または削除されます。
Match_conditionには、target_tableのプライマリ インデックスに対する等号制約を指定して、単一AMPで候補となるターゲット行セットに対するハッシュ アクセスが可能になるようにする必要があります。指定されたプライマリ インデックスの値は、WHEN NOT MATCHED句に指定された列値が暗黙に示すプライマリ インデックスの値に一致する必要があります。
プライマリ インデックスの値がusing_expressionの結果の場合、式はtarget_tableのどの列も参照できません。また、match_conditionでは、ソース テーブルまたはtarget_tableに属さない列に対するサブクエリーと参照を指定できません。
target_tableが行パーティション テーブルの場合、パーティション列の値もmatch_conditionに指定し、WHEN NOT MATCHED句にmatch_conditionと同じパーティション列の値を指定する必要があります。
ホスト変数は、match_condition内で許可されています。
すべてのホスト変数はコロン文字で始まらなければなりません。
match_conditionは、ターゲット テーブルでもソース テーブルでもないテーブルを参照することができません。
when_matched
WHEN MATCHED THEN { { UPDATE | UPD } SET update_spec [,...] | DELETE }
when_not_matched
WHEN NOT MATCHED THEN { INSERT | INS }
  { VALUES | ( insert_column [,...] VALUES ) }
  ( insert_expression [,...] )
LOGGING [ALL] ERRORS
すべてのデータ エラー、参照インデックス エラー、USIエラーをログに記録します。
LOGGING ERRORSオプションを指定しない場合、システムはエラーを処理しません。エラーが発生した場合、次のセッション モードの動作が実行されます。
  • 現在のセッション モードがANSIである場合、エラーのあるリクエストはロールバックします。
  • 現在のセッション モードがTeradataである場合、エラーのあるトランザクションはロールバックします。
オプションのキーワードALLはデフォルトです。
WITH NO LIMIT
このMERGE操作のターゲット データ テーブルに関連付けられているエラー テーブルに記録できるエラー数を制限しないことを指定します。
これは、MERGEリクエストについて記録できるエラーの数に制限がないことを示しているわけではありません。このオプションを指定すると、システム定義のエラー制限値である16,000,000個のエラーが記録されるまでエラーが記録され続けます。Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144のCREATE ERROR TABLEを参照してください。
WITH LIMIT OF error_limit
このMERGE操作のターゲット データ テーブルに関連付けられているエラー テーブルに記録できるエラーの制限値をerror_limitに指定します。
この制限値を超えると、システムは、Teradataセッション モードではリクエストを、ANSIセッション モードではトランザクションをアボートし、ターゲット テーブルに対するすべての変更をロールバックしますが、ログに記録したエラー テーブルの行はロールバックしません。
error_limitに指定できる値の範囲は、1~16,000,000です。error_limitのデフォルト値は10です。
WITH [NO] ISOLATED LOADING
NOを含めないと、MERGEを同時ロード分離操作として実行できます。
NOを含めると、MERGEは同時ロード分離操作として実行されません。
CONCURRENT
読みやすくするために含めることができるオプションのキーワード。
update_spec
update_column = update_expression
指定のフィールドの更新方法を定義するターゲット テーブルの列(update_columnによって指定される)についての等価条件を指定します。
update_expressionは、更新するフィールドに入れる新しい値を生成します。
update_expressionには、ソース テーブルの列参照、ターゲット テーブルの列参照、定数、予約語NULLとして表わされるnull、DEFAULT関数、ホスト変数、新しい値を計算する算術式を組み込むことができます。
すべてのホスト変数はコロン文字で始まらなければなりません。
派生PERIOD列名を指定することはできません。
DELETE
一致する行が削除されることを指定します。
DELETEをMERGE文でINSERTまたはUPDATEと組み合わせることはできません。
INSERT
INS
この後にマッチしない行に挿入される値リストが続くことを指定します。
挿入される行はtarget_table内の既存の行の重複である可能性があるので、それが受け入れられるかどうかはtarget_tableがSETまたはMULTISETとして定義されているかどうかに依存します。
insert_column
マッチしない行について、値リスト内の対応する値が挿入される列名を指定します。
insert_expression
マッチしない行について、対応するinsert_columnに挿入される値を指定します。
ホスト変数は、insert_expression内で許可されています。
すべてのホスト変数はコロン文字で始まらなければなりません。