以下のテーブル定義があるとします(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指定でのb2とc2の順序が、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と同じパーティション列の値を指定する必要があります。