MERGE STATEMENT

Description

Merge statement

Versions

This example was developed in Oracle 9.0.1 and retested in Oracle 9.2.0

This operation is implemented in the following versions

9.0.1
9.2.0
10.1.0
10.2.0

Example

This example was developed using Oracle 9.2.0.1 on Windows 2000

This example requires the following table definition

    CREATE TABLE t1 (c1 NUMBER,c2 NUMBER);
    CREATE TABLE t2 (c1 NUMBER,c2 NUMBER);

    MERGE INTO t2 a2
    USING
    (  
      SELECT * FROM t1
    ) a1
    ON (a2.c1 = a1.c1)
    WHEN MATCHED THEN
      UPDATE SET a2.c2 = a1.c2
    WHEN NOT MATCHED THEN
      INSERT (a2.c1,a2.c2)
      VALUES (a1.c1,a2.c2);

In Oracle 9.0.1 this statement generates the following execution plan

0     MERGE STATEMENT Optimizer=CHOOSE
1   0   MERGE OF 'T2'
2   1     HASH JOIN (OUTER)
3   2       TABLE ACCESS (FULL) OF 'T1'
4   2       TABLE ACCESS (FULL) OF 'T2'

In Oracle 9.2 and Oracle 10.2 this statement generates the following execution plan

0     MERGE STATEMENT Optimizer=CHOOSE
1   0   MERGE OF 'T2'
2   1     VIEW
3   2       HASH JOIN (OUTER)
4   3         TABLE ACCESS (FULL) OF 'T1'
5   3         TABLE ACCESS (FULL) OF 'T2'