日期:2014-05-16  浏览次数:20485 次

Merge into 使用详解(2)

自从版本9i之后,对于“有则更新,无则插入”有了一个新的用法,不需要再执行2次SQL了。

MERGE INTO本来应该是用来合并表的,不过因为其特性,根据用途不同可以用在以下场合:

1.合并表
2.外部数据插入更新
3.用JOIN表更新

各种情况下的
1.合并表
把表格T2的数据合并到表格T1里,根据结合条件,如果存在则更新,不存在则插入

Sql代码 复制代码?收藏代码
  1. ? ??
  2. MERGE?INTO?T1 ??
  3. USING?T1?ON( ??
  4. ??T1.user_id?=?T2.user_id ??
  5. ) ??
  6. WHEN?MATCHED?THEN??
  7. ??UPDATE?SET??
  8. ?????????T1.user_nm?=?T2.user_nm ??
  9. WHEN?NOT?MATCHED?THEN??
  10. ??INSERT? ??
  11. ?????(user_id,user_nm) ??
  12. ??VALUES??
  13. ?????(T2.user_id,T2.user_nm) ??
  14. ???
 
MERGE INTO T1
USING T1 ON(
  T1.user_id = T2.user_id
)
WHEN MATCHED THEN
  UPDATE SET
         T1.user_nm = T2.user_nm
WHEN NOT MATCHED THEN
  INSERT 
     (user_id,user_nm)
  VALUES
     (T2.user_id,T2.user_nm)
 


2.外部数据插入更新
根据外部传进来的参数,如果存在的话,用给定的参数更新,如果不存在则插入

Sql代码 复制代码?收藏代码
  1. MERGE?INTO?T1 ??
  2. USER?DUAL?ON( ??
  3. ??T1.user_id?=?'001'??
  4. ) ??
  5. WHEN?MATCHED?THEN??
  6. ??UPDATE?SET??
  7. ?????T1.user_nm?=?'David?Vi'??