1. 程式人生 > >oracle中 merge into 的用法

oracle中 merge into 的用法

大數據 char 條件 http -1 alt mat 一個表 dml語句

很多時候我們需要通過篩選條件同時對表進行 更新,插入,刪除 等操作。這樣如果我們單一的去操作表會顯得很麻煩,下面會說到這個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 的用法