oracle中 merge into用法

对一张表,在不同的条件下实现不同的操作(update/insert),在 oracle 中可以用 merge into

  • 要对表中某几条记录进行判断并操作,代码实现如下:
 --  user_table 表中,如果存在 user_skey = 99999 的记录,则修改该记录last_name字段, 否则插入一条新纪录 
    merge into user_table t1 using (select 99999 as user_skey2, 9999 as user_id2 from dual) t2 on  (t1.user_skey = t2.user_skey2) 
when matched then 
     update  set t1.last_name = '宝强' 
when not matched then  
     insert  (t1.user_skey , t1.user_id, last_name, first_name, ba_no , dept_id) values (1111,222, '俊杰', '林', 111 ,10)

注:update 和 insert 的记录总和与 using 后面的集合中的元素个数一致

  • 对表中全部记录进行操作,代码实现如下:
-- user_table 表中, 如果存在 user_skey = 11111 的记录,则修改所有记录的 last_name 字段,否则插入一条新的记录 
     merge into user_table t1 using dual  on ((select count(*) from user_table where user_skey = 11111) > 0)
 when matched then
      update set t1.last_name = '杰伦'
 when not matched then
       insert  (t1.user_skey , t1.user_id, last_name, first_name, ba_no , dept_id) values (1112,222, '俊杰', '林', 111 ,10)`

update 的记录条数与 count 的值一致

例子:

create table TEST (ID INTEGER,VALUE VARCHAR2(255) );   
insert into TEST values (1, 'test1');   
insert into TEST values (2, 'test2'); 

我们想插入一条数据 {ID=2,NAME=‘newtest2’} 那么可以这么写

MERGE INTO  TEST T1
USING (SELECT '2' as ID, 'newtest2' as NAME FROM dual) T2 on (T1.ID=T2.ID)
WHEN MATCHED THEN UPDATE SET T1.NAME=T2.NAME
WHEN NOT MATCHED THEN  INSERT (T1.ID, T1.NAME) VALUES (T2.ID, T2.NAME ); 

你可能感兴趣的:(数据库)