oracle merge into 用法詳解
1. MERGE INTO 的用途
MERGE INTO 是Oracle 9i以後才出現的新的功能。那這個功能 是什麼呢?
簡單來說,就是:“有則更新,無則插入”
從這句話裡,應該可以理解到,merge into 操作一個物件'A'的時候,要有另外一個結果集做為源資料 'B'.
‘merge into’ 將B中的資料與A中的資料按照一定條件'C'進行對比,如果 A中資料滿足C條件,則進行update操作,如果不滿足條件 'C',則進行insert操作。(請注意這種對應關係)
2、 語法結構
MERGE [INTO] [schema.]table [alias]
USING {[schema.]table|views|query} [alias]
ON {condition}
WHEN MATCHED THEN UPDATE SET {clause}
WHEN NOT MATCHED THEN INSERT VALUES {clause}
我們可以用於單條資料的處理,也可以用於資料的批處理。對於merge into來說,那都是張飛吃豆芽兒,小菜一碟兒。而且效率要比單獨執行update+insert 操作效率要高。
但是請注意,using語句中的結果集 B不可以與merge into 的物件A相同,否則,會因為結果集A,B恆等。
當 on() 進行等值判斷時,只可以進行update操作,不能進行insert 操作,當 on() 進行不等值判斷時,只可以進行insert操作,不能進行update操作。
可能這樣說還不是很清楚。下面我們實際操作演示,就會理解清楚了。
3. 測試 MERGE INTO
--------------------------------------------------------------------------------------------------------------
------------------------------------- 建立測試表--TEST1 ----------------------------------
SQL> CREATE TABLE TEST1(
2 USERID NUMBER,
3 ID NUMBER);
Table created
--------------------------------------------------------------------------------------------------------------
---------------------------------- 填充測試資料 -------------------------------
SQL> begin
2 for i in 200..230 loop
3 insert into test1 values(i,(i+100)/10);
4 end loop;
5 end;
6 /
PL/SQL procedure successfully completed
SQL> select * from test1;
USERID ID
---------- ----------
200 30
201 30.1
202 30.2
203 30.3
204 30.4
205 30.5
206 30.6
207 30.7
208 30.8
209 30.9
210 31
211 31.1
212 31.2
213 31.3
214 31.4
215 31.5
216 31.6
217 31.7
218 31.8
219 31.9
USERID ID
---------- ----------
220 32
221 32.1
222 32.2
223 32.3
224 32.4
225 32.5
226 32.6
227 32.7
228 32.8
229 32.9
230 33
31 rows selected
--------------------------------------------------------------------------------------------------------------
----------------------------- 建立測試表--TEST2 、TEST3 --------------------------------
SQL> create table test2
2 as
3 select userid,trunc(id,-1) id2 from test1 where length(id)=4;
Table created
SQL> select * from test2;
USERID ID2
---------- ----------
201 30
202 30
203 30
204 30
205 30
206 30
207 30
208 30
209 30
211 30
212 30
213 30
214 30
215 30
216 30
217 30
218 30
219 30
221 30
222 30
USERID ID2
---------- ----------
223 30
224 30
225 30
226 30
227 30
228 30
229 30
27 rows selected
SQL> create table test3
2 as
3 select userid,id id3 from test1 where length(id) <> 4;
Table created
SQL> select * from test3;
USERID ID3
---------- ----------
200 30
210 31
220 32
230 33
--------------------------------------------------------------------------------------------------------------
----------------------------------- 測試MERGE INTO -----------------------------------
SQL> MERGE INTO test3 t
2 USING (SELECT userid,id2 FROM test2 WHERE id2=30) tw
3 ON (t.userid = tw.userid)
4 WHEN MATCHED THEN UPDATE SET t.id3=tw.id2
5 WHEN NOT MATCHED THEN INSERT VALUES(tw.userid,tw.id2);
Done
SQL> SELECT * FROM test3;
USERID ID3
---------- ----------
200 30
210 31
220 32
230 33
202 30
201 30
204 30
203 30
228 30
217 30
209 30
221 30
219 30
227 30
205 30
212 30
225 30
208 30
222 30
226 30
USERID ID3
---------- ----------
215 30
218 30
214 30
216 30
211 30
224 30
213 30
223 30
206 30
207 30
229 30
31 rows selected
SQL>
--測試完成,我們看到,test2表中的資料全部加到test3表中。
PS:
on(condition_clause)這裡的條件句中,可以使用=,>,< 等比較運算子。
------------------------------------- The End -------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2123268/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE merge用法詳解Oracle
- oracle-merge用法詳解Oracle
- oracle-merge用法詳解 (轉)Oracle
- oracle merge into用法Oracle
- oracle中merge into用法解析Oracle
- oracle merge into用法(R1)Oracle
- 詳解Map.merge()
- SQLServer MERGE 用法SQLServer
- oracle 9i/10g merge 用法Oracle
- oracle中的exists 和not exists 用法詳解Oracle
- 【原】關於Oracle Merge操作的簡單用法Oracle
- 轉:oracle 9i/10g merge 用法Oracle
- Oracle minus用法詳解及應用例項Oracle
- oracle中的exists和not exists和in用法詳解Oracle
- git rebase vs git merge詳解Git
- extern用法詳解
- Metasploit用法詳解
- xargs用法詳解
- Nmap用法詳解
- mount用法詳解
- SQL中Merge的用法SQL
- sql server merge 的用法SQLServer
- git分支管理--rebase&merge詳解Git
- oracle中merge的用法,以及各版本的區別 CreateOracle
- Flutter ListView 用法詳解FlutterView
- MyBatis Generator 用法詳解MyBatis
- iconfont用法詳解
- Promise用法詳解(一)Promise
- StringTie用法詳解
- SVG <markers>用法詳解SVG
- Elasticsearch SQL用法詳解ElasticsearchSQL
- git stash用法詳解Git
- JSONP用法詳解JSON
- Generator用法詳解+co
- appendChild()用法詳解APP
- jQuery 事件用法詳解jQuery事件
- SVG transform用法詳解SVGORM
- expdp/impdp 用法詳解