ITPub博客

首页 > 数据库 > Oracle > merge into只扫描一次table。

merge into只扫描一次table。

原创 Oracle 作者:dotaddjj 时间:2011-07-28 18:46:51 0 删除 编辑

oracle merge into详细介绍
今天一看见sql中还有merge into的sql使用,查过资料是oracle9I新增的语法,主要是用于合并update和insert语句,由于update要带来一次全表扫描,insert又来带来一次全表的扫描
merge into则可以解决上述问题,让表只进行一次扫描
基本语法就是
merge into table1 a
using table2 b
on (a.col1=b.col2)
when matched then
update set
when not matched then
insert values
现在来看看上面的一堆sql是什么意思,首先merge into是需要更新的table1,using是用来对比的关联表,on用于两张表的关联条件。
下面的两个when matched和when not matched则是分别符合关联条件和不符合关联条件执行的update和insert,下面来实际运用一下。
create table dave001 as select * from dave where id=4
此时有dave001和dave表,下面来对dave001 merge into。
merge into dave001 a
using dave b
on (a.id=b.id)
when matched then
update set a.name=b.name
when not matched then
insert values(b.id,d,name)
用dave表来对dave001更新,dave001的所有记录符合a.id=b.id的就执行update操作,不符合a.id=b.id的就执行insert操作,而且此时matched只能update,not matched也只能insert或者不操作
再来看看下面的merge into
merge into dave001 a
using dave b
on (a.id=b.id)
when matched then
update set a.id=b.id,a.name=b.name
when not matched then
insert values(b.id,d,name)
此时oracle无法对连接条件的column进行update set,而且注意是update set 和insert values,因为默认的都是上面的更新表dave001。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1053143/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: lead和lag函数
请登录后发表评论 登录
全部评论
  • 博文量
    220
  • 访问量
    1662983