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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle中merge into用法解析Oracle
- oracle merge into 用法詳解Oracle
- ORACLE merge用法詳解Oracle
- oracle merge into用法(R1)Oracle
- oracle-merge用法詳解Oracle
- oracle-merge用法詳解 (轉)Oracle
- SQLServer MERGE 用法SQLServer
- oracle 9i/10g merge 用法Oracle
- 【原】關於Oracle Merge操作的簡單用法Oracle
- 轉:oracle 9i/10g merge 用法Oracle
- SQL中Merge的用法SQL
- sql server merge 的用法SQLServer
- oracle中merge的用法,以及各版本的區別 CreateOracle
- oracle_mergeOracle
- MySQL中merge表儲存引擎用法MySql儲存引擎
- oracle hint no_mergeOracle
- Oracle Merge語法Oracle
- Java 8 中 Map 騷操作之 merge() 的用法Java
- Oracle merge into delete語法Oracledelete
- Oracle Performance Storyteller MERGEOracleORM
- Oracle EBS AD Merge PatchOracle
- oracle中merge 語句使用Oracle
- ORACLE WITH AS 用法Oracle
- lightdb -- merge into insert 相容 OracleOracle
- Oracle 的 merge 更新和插入操作Oracle
- oracle之merge語法(轉載)Oracle
- ORACLE SEQUENCE用法Oracle
- oracle cast 用法OracleAST
- oracle job用法Oracle
- oracle restrice用法OracleREST
- Oracle批次生成Merge指令碼程式Oracle指令碼
- Oracle merge 與 PG新特性 UPSERTOracle
- Oracle EXPLAIN PLAN用法OracleAI
- 關於oracle with as用法Oracle
- Oracle sql trace用法OracleSQL
- Oracle Hints的用法Oracle
- oracle job的用法Oracle
- oracle exp imp 用法Oracle