欢迎来到天天文库
浏览记录
ID:34724424
大小:49.16 KB
页数:3页
时间:2019-03-10
《mergeinto的使用详解-》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Merge是一个非常有用的功能,类似于Mysql里的insertintoonduplicatekey.Oracle在9i引入了merge命令,通过这个merge你能够在一个SQL语句中对一个表同时执行inserts和updates操作.当然是update还是insert是依据于你的指定的条件判断的,Mergeinto可以实现用B表来更新A表数据,如果A表中没有,则把B表的数据插入A表.MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表语法如下MERGEINTO[yourtable-name][renameyourtable
2、here]USING([writeyourqueryhere])[renameyourquery-sqlandusingjustlikeatable]ON([conditionalexpressionhere]AND[...]...)WHENMATHEDTHEN[hereyoucanexecutesomeupdatesqlorsomethingelse]WHENNOTMATHEDTHEN[executesomethingelsehere!]我们先看看一个简单的例子,来介绍一个mergeinto的用法mergeintoproductspusingnewproduct
3、snpon(p.product_id=np.product_id)whenmatchedthenupdatesetp.product_name=np.product_namewhennotmatchedtheninsertvalues(np.product_id,np.product_name,np.category)在这个例子里。前面的mergerintoproductsusingnewproducts表示的用newproducts表来merge到products表,merge的匹配关系就是on后面的条件子句的内容,这里根据两个表的product_id来进行匹配
4、,那么匹配上了我们的操作是就是whenmatchedthen的子句里的动作了,这里的动作是updatesetp.product_name=np.product_name,很显然就是把newproduct里的内容,赋值到product的product_name里。如果没有匹配上则insert这样的一条语句进去。大家看看这个mergetinot的用法是不是一目了然了呀。这里merger的功能,好比比较,然后选择更新或者是插入,是一系列的组合拳,在做merge的时候,这样同样的情况下,merge的性能是优于同等功能的update/insert语句的。有人曾经分析merg
5、e是批量处理对性能贡献很大,个人觉得这个是没有考据的。我们也可以在using后面使用视图或者子查询。比如我们把newproducts换成mergeintoproductspusing(select*fromnewproducts)npon(p.product_id=np.product_id)whenmatchedthenupdatesetp.product_name=np.product_namewhennotmatchedtheninsertvalues(np.product_id,np.product_name,np.category)也是可以的。在Orac
6、le10g中MERGE有如下一些改进:1、UPDATE或INSERT子句是可选的2、UPDATE和INSERT子句可以加WHERE子句3、在ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表4、UPDATE子句后面可以跟DELETE子句来去除一些不需要的行我们通过实例来一一看看如上的新特性1.UPDATE或INSERT子句是可选的在9i里由于必须insertinto和update都要存在,也就是不是update就是insert,不支持单一的操作,虽然还是可以曲线救国,呵呵但是有些过于强势了。而10g里就是可选了,能符合我们更多的需求
7、了比如上面的句子我们可以只存在update或者insertmergeintoproductspusingnewproductsnpon(p.product_id=np.product_id)whenmatchedthenupdatesetp.product_name=np.product_name这里,如果匹配就更新,不存在就不管了。2.UPDATE和INSERT子句可以加WHERE子句这也是一个功能性的改进,能够符合我们更多的需求,这个where的作用很明显是一个过滤的条件,是我们加入一些额外的条件,对只对满足where条件的进行更新和insertmergein
8、topro
此文档下载收益归作者所有