1. 程式人生 > >Oracle Meger into 函式

Oracle Meger into 函式

Oracle 在 9i 引入了 merge 命令, 通過這個 merge 能夠在一個SQL 語句中對一個表同時執行 inserts 和 updates 操作。Merge into 可以實現用 B 表來更新 A 表資料(如果匹配上),如果 A 表中沒有,則把 B 表的資料插入 A 表中。

管中窺豹

MERGE INTO [your table-name] [rename your table here] 
USING ( [write your query here] )[rename your query-sql and using just like a table] 
ON ([conditional expression here] AND [...]...) 
WHEN MATHED THEN [here you can execute some update sql or something else ] 
WHEN NOT MATHED THEN [execute something else here ! ] 

舉個栗子:

merge into new_products p using old_products op 
on (p.product_id = np.product_id) 
when matched then 
update set p.product_name = op.product_name 
when not matched then 
insert values(
op.product_id, op.product_name, op.category) 

使用 old_products 表中的輸入插入 new_products 中,匹配關係為 on 後面的條件字句的內容。when matched then 就是根據匹配關係匹配上了,when not matched then 就是沒有匹配上需要做的相應操作。網上的一般資料都顯示在做 merge 的時候,這樣同樣的情況下,merge 的效能是優於同等功能的update/insert 語句的。

在Oracle 10g中MERGE有如下一些改進:
1、UPDATE 或 INSERT 子句是可選的
2、UPDATE 和 INSERT 子句可以加 WHERE 子句
3、UPDATE 子句後面可以跟 DELETE 子句來去除一些不需要的行

UPDATE 或 INSERT 子句是可選的

merge into new_products p using old_products op 
on (p.product_id = np.product_id) 
when matched then 
update set p.product_name = op.product_name

when matched then 和 when not matched then 都是可選則引數,可以根據具體的業務型別來進行資料庫操作,而不用拘泥於原有特定的語法。

新增 WHERE 子句

merge into new_products p using old_products op 
on (p.product_id = np.product_id) 
when matched then 
update set p.product_name = op.product_name where op.name like '%co2fe%'
when not matched then 
insert values(
op.product_id, op.product_name, op.category) where op.name like '%co2fe%'

在添加了 where 條件之後我們的 update/insert 就會變得更加的靈活,能夠滿足更多的業務需求。

DELETE 子句來去除一些不需要的行

merge into new_products p using old_products op 
on (p.product_id = np.product_id) 
when matched then 
update set p.product_name = op.product_name 
delete where op.name like '%co2fe%'
when not matched then 
insert values(
op.product_id, op.product_name, op.category)

同樣的,使用 delete 語句之後我們可以實現更多的功能和業務,擴充套件了 merge into 的使用面。

本文由個人 hexo 部落格 co2fe.com 遷移
date: 2017-09-12 15:38:41