MERGE INTO是Oracle 9i新增的,8i以及之前版本都没有.
这个函数的主要功能是将一个表的数据倒入到另外一个表中.它合并了update和insert语句,使得在一次更新数据时,只用一次磁盘I/O(爽啊.)
这一个优点是MERGE INTO在之前单纯的UPDATE和INSERT上的一个性能的大大提高.
我们来看看MERGEINTO 各个KEYWORD的具体含义
1.Merge into table_name [alias_name]
这里的table_name是等待被更新的数据表,或者叫目的表,数据目的表.
2.Using statement [alias_name]
这里的statement可以是数据表,也可以是查询的数据集合.这些数据集合就是数据源.
3.On condition
condition就是对于需要更新数据的记录进行限定的条件.类似where子句中的条件.
4. Update statement
这里就是更新数据语句部分.
5. Insert(column) values(arg)
这里和普通insert语句的唯一区别是不需要into子句,否则报找不到values关键字错误.
WHEN MATCHED THEN和WHEN NOT MATCHED THEN 用来在On判断之后区分的不同操作情况.
示例:
merge into t_csc_flowlog a using (select pro_id, gtin, security_code from t_csc_product start with security_code = :new.security_code connect by prior security_code = parent_code) b on (a.gtin = b.gtin and a.security_code = b.security_code) when matched then update set a.flow_log = :new.flow_log when not matched then insert (flow_id, pro_id, gtin, security_code, flow_log, create_time) values (func_get_seq('t_csc_flowlog'), b.pro_id, b.gtin, b.security_code, :new.flow_log, sysdate);