mergeinto的使用详解-

mergeinto的使用详解-

ID:34724424

大小:49.16 KB

页数:3页

时间:2019-03-10

mergeinto的使用详解-_第1页
mergeinto的使用详解-_第2页
mergeinto的使用详解-_第3页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。