這篇文章將為大家詳細(xì)講解有關(guān)oracle merge into的用法是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
我們提供的服務(wù)有:網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、永康ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的永康網(wǎng)站制作公司
1. MERGE INTO 的用途
MERGE INTO 是Oracle 9i以后才出現(xiàn)的新的功能。那這個(gè)功能 是什么呢?
簡單來說,就是:“有則更新,無則插入”
從這句話里,應(yīng)該可以理解到,merge into 操作一個(gè)對(duì)象'A'的時(shí)候,要有另外一個(gè)結(jié)果集做為源數(shù)據(jù) 'B'.
‘merge into’ 將B中的數(shù)據(jù)與A中的數(shù)據(jù)按照一定條件'C'進(jìn)行對(duì)比,如果 A中數(shù)據(jù)滿足C條件,則進(jìn)行update操作,如果不滿足條件 'C',則進(jìn)行insert操作。(請(qǐng)注意這種對(duì)應(yīng)關(guān)系)
2、 語法結(jié)構(gòu)
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}
我們可以用于單條數(shù)據(jù)的處理,也可以用于數(shù)據(jù)的批處理。對(duì)于merge into來說,那都是張飛吃豆芽兒,小菜一碟兒。而且效率要比單獨(dú)執(zhí)行update+insert 操作效率要高。
但是請(qǐng)注意,using語句中的結(jié)果集 B不可以與merge into 的對(duì)象A相同,否則,會(huì)因?yàn)榻Y(jié)果集A,B恒等。
當(dāng) on() 進(jìn)行等值判斷時(shí),只可以進(jìn)行update操作,不能進(jìn)行insert 操作,當(dāng) on() 進(jìn)行不等值判斷時(shí),只可以進(jìn)行insert操作,不能進(jìn)行update操作。
可能這樣說還不是很清楚。下面我們實(shí)際操作演示,就會(huì)理解清楚了。
3. 測(cè)試 MERGE INTO
--------------------------------------------------------------------------------------------------------------
------------------------------------- 創(chuàng)建測(cè)試表--TEST1 ----------------------------------
SQL> CREATE TABLE TEST1(
2 USERID NUMBER,
3 ID NUMBER);
Table created
--------------------------------------------------------------------------------------------------------------
---------------------------------- 填充測(cè)試數(shù)據(jù) -------------------------------
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
--------------------------------------------------------------------------------------------------------------
----------------------------- 創(chuàng)建測(cè)試表--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
--------------------------------------------------------------------------------------------------------------
----------------------------------- 測(cè)試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>
--測(cè)試完成,我們看到,test2表中的數(shù)據(jù)全部加到test3表中。
PS:
on(condition_clause)這里的條件句中,可以使用=,>,< 等比較運(yùn)算符。
關(guān)于oracle merge into的用法是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。