17.10 - 例: RPPIターゲット テーブルを使用するMERGE操作では、パーティション列セットの代わりにシステム派生PARTITION列を使用できない - Advanced SQL Engine - Teradata Database

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

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

次のソース リレーションとターゲット リレーションの定義を定義したとします。

     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),
     UNIQUE INDEX(b2);

次の例は、ON句では、ターゲット リレーションのパーティション列セットの代わりにシステム派生PARTITION列を使用できないので、失敗します。

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

このMERGEリクエストは、ターゲット テーブルa1および、そのパーティション列b1のプライマリ インデックスに関する条件を指定しているので有効です。

     MERGE INTO t1
       USING t2
       ON a1=a2 AND b1=10
     WHEN MATCHED THEN
       UPDATE SET c1=c2;

次のMERGEリクエストは、同様に同じソース テーブルとターゲット テーブルに対して記述されていますが、ON句にターゲット テーブルのパーティション列b1を指定していないので、有効ではありません。

     MERGE INTO t1
       USING t2
       ON a1=a2
     WHEN MATCHED THEN
       UPDATE SET c1=c2;

システム派生PARTITION列に基づく条件をON句に指定できますが、残余条件としてのみ指定できます。例えば、次の例は、プライマリ インデックスの等価条件a1=a2、およびターゲット テーブルのパーティション列の条件b1=10が両方とも指定されているので、適切に動作します。システムは、追加のt1.PARTITION条件t1.PARTITION=25を残余条件としてのみ処理します。