使用Merge语句同时执行插入和更新操作

考虑下列情况,对于一张表T,有(A,B)两列,进行下列操作:如果表T中存在A=‘a1’的记录,就更新对应的B列值为‘b1’;如果不存在,就插入这一条记录。

经典的处理方式是先查询,看记录是否存在,再确定是进行插入还是删除操作。

从oracle9i开始,就已经支持Merge语句,可以使用一条sql语句,同时执行插入和更新操作。

下面举一个例子,表t_englishscore_stuengname表,有studentnum和engname两列,现在需要处理一条记录:(’20011111111′,’Li Bo’),不确定是否插入还是更新,使用Merge语句如下:

merge into t_englishscore_stuengname t
using (select ’20011111111′ as studentnum,’Li Bo’ as engname from dual) s
on (t.studentnum=s.studentnum)
when matched then
update set t.engname=s.engname where t.studentnum=s.studentnum
when not matched then
insert (studentnum,engname) values(s.studentnum,s.engname);

有关Merge语句的详细说明参见下列网址,本文不予赘述。

[1] eygle. 使用Merge Into 语句实现 Insert/Update.
http://www.eygle.com/digest/2009/01/merge_into_insertupdate.html.
[2] eygle. Merge用法:Oracle 10g中对Merge语句的增强.
http://www.eygle.com/digest/2009/02/mergeoracle_10gmerge.html
[3] google. www.google.com

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>