按我的理解,MERGE命令是update和insert的结合。看网上的文章,效率要比单独判断来更新和插入要高。
参考:http://www.linuxidc.com/Linux/2014-07/104695.htm
MERGE INTO 是Oracle 9i新增的语法,在10g时得到补充,用来合并UPDATE和INSERT语句,根据一张表或子查询与另一张表进行连接查询,连接条件匹配就进行UPDATE,不匹配就进行INSERT,这个语法仅需要一次全表扫描就可以完成全部工作,执行效率会比单纯的UPDATE+INSERT高,具体应用可用于表之间的同步。
我理解的语法:
MERGE INTO 目标表
USING 源表/视图/查询
ON 连接条件
--更新可选 WHEN MATCHED THEN
UPDATE SET 目标表.列=源表/视图/查询.列
--10g功能 WHERE 源表/视图/查询.列=条件
--10g功能 DELETE WHERE 源表/视图/查询.列=条件 (删除的是目标表的记录)
--插入可选 WHEN NOT MATCHED THEN
INSERT [列] VALUES(值)
--10g功能 WHERE 源表/视图/查询.列=条件
10g中增强一:条件操作
10g中增强二:删除操作
An optional DELETE WHERE clause can be used to clean up after a merge operation. Only those rows which match both the ON clause and the DELETE WHERE clause are deleted.
注: 匹配时 更新能否使用目标表条件未知,删除能否使用目标表条件未知
不匹配时 插入时使用目标表条件无意义,删除能否使用 源表条件删除源表未知
参考 http://tomszrp.itpub.net/post/11835/263865
http://tomszrp.itpub.net/post/11835/263865