oracle中 merge into 的用法

Posted 漠北桑海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中 merge into 的用法相关的知识,希望对你有一定的参考价值。

很多时候我们需要通过筛选条件同时对表进行 更新,插入,删除 等操作。这样如果我们单一的去操作表会显得很麻烦,下面会说到这个merge  into 的用法会极大的优化我们操作表的时间和代码量。

举例,先新建2个表:

create   table   book(
  id  number,
  name   varchar(64),
  price   number,
  primary key(id)
)
create   table  pbook   as  select  * from   book
delete   pbook

   这里create  table  A as (select....)  不熟悉的人可以记一下,以后可以常用,相当于备份一个表,既有表结构也有数据。分别插入不同的数据,如下

 

现在我们对表book (下面称a表)进行操作, 需要同时更新a表价格为0的数据,插入 a表没有的数据,且通过条件过滤掉b表的价格大于1000的数据的极大数据。

merge into  book   a
 using   pbook b
 on (a.id=b.id) 
when  matched  then  
 update  set  a.price=b.price*0.8
 where    a.price=0
 delete   where  (b.price>1000)
when  not matched   then 
 insert  (a.id,a.name,a.price)
 values  (b.id,b.name,b.price);

 说明:when matched then  是判断条件,即如果a表中 a.price没有等于0的就不会去执行更新语句了,后面的delete where 也是在更新中过滤某些数据。没有则可以不加

 a表结果如下:

该语句做到了:1、删除id=1的数据,2、更新了2,3的数据。3、插入了4,5两条新数据。4、id为4的数据不变

merge into是dml语句,需要进行rollback和commit  结束事物

发现:经测试插入数据顺序为无序(没有规律,如有人发现规律请指教)。

 

以上是关于oracle中 merge into 的用法的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中Merge into用法总结

Oracle中merge into的用法

oracle中merge into用法解析

oracle merge into用法

Oracle中Merge into用法总结

Oracle中merge Into的用法