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_matchedとwhen_not_matchedは、逆の順序で指定できます。
構文要素
- with_isolated_loading
WITH [NO] [CONCURRENT] ISOLATED LOADING
- target_table
- 以下を実行する基本データ テーブル、グローバル一時テーブル、揮発テーブル、またはキュー テーブルを指定します。
- ターゲット テーブルにはプライマリ インデックスがなければならず、行パーティション化できますが、列パーティション化はできません。
- correlation_name
- using_expression、subquery、またはsource_table_nameで指定されたソース テーブルの任意指定の相関名を指定します。
- using_expression
- using_expression値のリストとして併合のためのソース テーブル行を指定する、テーブル式の列を定義する式を指定します。
- ソース テーブル行を表わすテーブル式は、using_expression値のカンマ区切りのリストから成ります。それは単一値の式ではありません。
- using_expressionは、以下のいずれをも参照できます。
- 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_condition、update_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内で許可されています。
- すべてのホスト変数はコロン文字で始まらなければなりません。