例: ターゲット リレーションにパーティション プライマリ インデックスがある場合、ON句に行パーティション列セットを指定 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/vnq1596660420420.ditamap
dita:ditavalPath
ja-JP/vnq1596660420420.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

以下のテーブル定義があるとします(t1はa1にプライマリ インデックスを持ち、列b1でパーティション化されている)。

     CREATE TABLE t1 (
       a1 INTEGER,
       b1 INTEGER,
       c1 INTEGER)
     PRIMARY INDEX (a1)
     PARTITION BY b1;
     CREATE TABLE t2 (
       a2 INTEGER,
       b2 INTEGER,
       c2 INTEGER)
     PRIMARY INDEX (a2);

次のMERGEリクエストは、ON句にターゲット テーブルb1のパーティション列t1を指定しているので、有効です。

     MERGE INTO t1
       USING t2
       ON a1=a2 AND b1=b2
     WHEN MATCHED THEN
       UPDATE SET c1=c2
     WHEN NOT MATCHED THEN
       INSERT (a2, b2, c2);

次のMERGEリクエストは、ON句にターゲット テーブルのパーティション列b1を指定していないので、アボートされ、要求元にエラー メッセージが返されます。

     MERGE INTO t1
       USING t2
       ON a1=a2
     WHEN MATCHED THEN
       UPDATE SET c1=c2
     WHEN NOT MATCHED THEN
       INSERT (a2, b2, c2);

次のMERGEリクエストは、INSERT指定でのb2c2の順序が、ON句の指定順序と異なるため、アボートされ、要求元にエラー メッセージが返されます。INSERT指定は、ターゲット テーブルのプライマリ インデックス、およびターゲット テーブルが行パーティション テーブルの場合は、パーティション列セットに対するON句の制約に一致する必要があります。

     MERGE INTO t1
       USING t2
       ON a1=a2 AND b1=b2
     WHEN MATCHED THEN
       UPDATE SET c1=c2
     WHEN NOT MATCHED THEN
       INSERT (a2, c2, b2);

ターゲット テーブルが行パーティション テーブルの場合、パーティション列の値もsearch_conditionに指定し、INSERT句にsearch_conditionと同じパーティション列の値を指定する必要があります。