考虑下列情况,对于一张表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
[...]

最近留言