博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ORACLE MERGE指令使用

Posted on 2007-06-11 11:30  大胸宝腚  阅读(760)  评论(0)    收藏  举报
 

把数据从一个表复制到另一个表,插入新数据或替换掉老数据是每一个ORACLE DBA都会经常碰到的问题。在ORACLE9i以前的年代,我们要先查找是否存在老数据,如果有用UPDATE替换,否则用INSERT语句插入,其间少不了还有一些标记变量等等,繁琐的很。现在ORACLE9i专为这种情况提供了MERGE语句,使这一工作变得异常轻松,MERGE语句的语法如下:

MERGE [hint] INTO [schema .] table [t_alias] USING [schema .]

{ table | view | subquery } [t_alias] ON ( condition )

WHEN MATCHED THEN merge_update_clause

WHEN NOT MATCHED THEN merge_insert_clause;

例:

MERGE INTO tdest d

USING tsrc s ON (s.srckey = d.destkey)

WHEN MATCHED THEN

UPDATE SET d.destdata = d.destdata + s.srcdata

WHEN NOT MATCHED THEN

INSERT (destkey,destdata) VALUES (srckey,srcdata)

一条语句代替了原来的一段复杂语句,但是使用MERGE也是有要注意的地方的,看下面的例子:

CREATE TABLE tdest(destkey KEYTYE,destdata DATATYPE);

CREATE TABLE tsrc(srckey KEYTYE,srcdata DATATYPE);

--insert some rows into tsrc here.

MERGE INTO tdest d

USING tsrc s ON (d.destkey = s.srckey)

WHEN MATCHED THEN

UPDATE SET d.destkey = s.srckey

WHEN NOT MATCHED THEN

INSERT (d.destkey,d.destdata) VALUES (s.srckey,s.srcdata);