MERGE語句是Oracle9i新增的語法,用來合併UPDATE和INSERT語句。
通過MERGE語句,根據一張表或子查詢的連接條件對另外一張表進行查詢,
連接條件匹配上的進行UPDATE,無法匹配的執行INSERT。
這個語法僅需要一次全表掃描就完成了全部工作,執行效率要高於INSERT+UPDATE。
下面看個具體的例子:

--1.來源表
CREATE TABLE T AS SELECT ROWNUM ID, A.* FROM USER_OBJECTS A;

--2.目標表
CREATE TABLE T1 AS
SELECT ROWNUM ID, TABLE_NAME, CAST('TABLE' AS VARCHAR2(100)) OBJECT_TYPE
FROM USER_TABLES;

--3.根據來源表UPDATE和INSERT目標表
MERGE INTO T1 USING T
ON (T.OBJECT_NAME = T1.TABLE_NAME AND T.OBJECT_TYPE = T1.OBJECT_TYPE)
WHEN MATCHED THEN UPDATE SET T1.ID = T.ID
WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.OBJECT_NAME, T.OBJECT_TYPE);

--4.比較來源表和目標表
SELECT ID, OBJECT_NAME, OBJECT_TYPE FROM T
MINUS
SELECT * FROM T1;

MERGE語句中必須指定一個WHEN MATCHED和一個WHEN NOT MATHCED語句。如果除這兩種情況之外還有別的情況,你可能就需要使用一個常規的INSERT或者UPDATE語句。

另外一點是MERGE語句一次只能修改一行記錄,而且不能修改在ON子句中引用的列。

MERGE語句的目標表(target table)必須是一個可以使用INSERT語句進行插入或者UPDATE語句進行更新的表或者視圖。源表(source table)可以是任何的查詢表,比如說外部表或者管道化表函數。

arrow
arrow
    全站熱搜

    oracleD2K 發表在 痞客邦 留言(2) 人氣()