Oracle 之 MERGE INTO

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);


 

你可能感兴趣的:(Oracle 之 MERGE INTO)