oracle merge into用法
用途:
merge 命令可以用來用一個表中的資料來修改或者插入到另一個表。插入或者修改的操作取決於on子句的條件。
該語句可以在同一語句中執行兩步操作,可以減少執行多條insert 和update語句。
merge是一個確定性的語句,即不會在同一條merge語句中去對同一條記錄多次做修改操作。
語法:
1.into 子句
在into子句中指定所要修改或者插入資料的目標表
2.using 子句
在using子句中指定用來修改或者插入的資料來源。資料來源可以是表、檢視或者一個子查詢語句。
3.on 子句
在on子句中指定執行插入或者修改的滿足條件。在目標表中符合條件的每一行,oracle用資料來源中的相應資料修改這些行。對於不滿足條件的那些行,oracle則插入資料來源中相應資料。
4.when matched | not matched
用該子句通知oracle如何對滿足或不滿足條件的結果做出相應的操作。可以使用以下的兩類子句。
5.merge_update子句
merge_update子句執行對目標表中的欄位值修改。當在符合on子句條件的情況下執行。如果修改子句執行,則目標表上的修改觸發器將被觸發。
限制:當修改一個檢視時,不能指定一個default值
6.merge_insert 子句
merge_insert子句執行當不符合on子句條件時,往目標表中插入資料。如果插入子句執行,則目標表上插入觸發器將被觸發。
。限制:當修改一個檢視時,不能指定一個default值
merge into bonuses d
using (select employee_id, salary, department_id from employees
where department_id = 80) s
on (d.employee_id = s.employee_id)
when matched then update set d.bonus = d.bonus + s.salary*.01
when not matched then insert (d.employee_id, d.bonus)
values (s.employee_id, s.salary*0.01)
------------------------->>簡單案例:
------------------------------------- 建立測試表--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/29119536/viewspace-1562385/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQLServer MERGE 用法SQLServer
- merge into 用法深思
- merge into基本用法
- SQL中Merge的用法SQL
- lightdb -- merge into insert 相容 OracleOracle
- Oracle merge 與 PG新特性 UPSERTOracle
- Java 8 中 Map 騷操作之 merge() 的用法Java
- ORACLE SEQUENCE用法Oracle
- Oracle批次生成Merge指令碼程式Oracle指令碼
- Oracle實驗8--Merge與歸檔Oracle
- oracle comment on的用法Oracle
- oracle中substr() instr() 用法Oracle
- 【TUNE_ORACLE】Oracle Hint之概念與用法Oracle
- ORACLE sql merge into update where條件位置與效能消耗OracleSQL
- MySQL 06 mysql 如何實現類似 oracle 的 merge intoMySqlOracle
- Sqlserver、oracle中Merge的使用方法,一個merge語句搞定多個Insert,Update,Delete操作SQLServerOracledelete
- 【Oracle的NVL函式用法】Oracle函式
- oracle樹中prior的用法Oracle
- oracle中的CURRVAL和NEXTVAL用法Oracle
- Oracle批量插入資料insert all into用法Oracle
- 【SQL】Oracle查詢轉換之 OR用法SQLOracle
- sql merge intoSQL
- Merge Or Rebase
- git mergeGit
- Oracle中Nextval用法SEQUENCE與SYS_GUID()OracleGUI
- Oracle行列轉換及pivot子句的用法Oracle
- [轉載] Oracle:start with...connect by子句的用法Oracle
- Oracle臨時表的用法總結FLOracle
- ou have not concluded your merge (MERGE_HEAD exists)
- git merge origin master git merge origin/master區別GitAST
- Oracle minus用法詳解及應用例項Oracle
- 非空校驗在oracle和mysql中的用法OracleMySql
- oracle中listagg()和wmsys.wm_concat()基本用法Oracle
- Polyphase Merge Sort
- git 中止mergeGit
- Oracle優化案例-view merge與coe_load_sql_profile固定執行計劃(十五)Oracle優化ViewSQL
- pandas merge報錯
- Java HashMap merge() 方法JavaHashMap
- Merge Two Sorted List