oracle——merge

來源:互聯網
上載者:User

標籤:

 

一、概述  

  使用merge聲明從一個或者更多個表或視圖中篩選記錄,以用來更新或者插入到一個表或視圖中。你可以指定條件以決定是執行update操作還是insert操作到目標表或視圖中。

  這個聲明是一個方便的方式以聯合多種操作。這樣你就避免了大量的insert/update/delete這樣的dml操作。

  merge是一個deterministic語句。你不能在對同一個目標表的merge語句中多次更新。

MERGE [INTO [schema .] table [t_alias] --資料集s(只能是表)USING [schema .] { table | view | subquery } [t_alias] --資料集d(可以是表、子查詢、視圖)ON ( condition ) --s和d的關聯條件WHEN MATCHED THEN merge_update_clause --d中符合關聯條件的資料用來更新s關聯到的資料記錄WHEN NOT MATCHED THEN merge_insert_clause;--d中不滿足關聯條件的資料插入到s資料集中

二、舉例

  這裡使用scott模式下的表舉例:

  首先建立表並插入資料

--建立表create table emp_dept(       empno number(4) primary key not null,       ename varchar2(10),       deptno number(2),       deptname varchar2(14));--插入資料insert into emp_deptselect e.empno,e.ename,d.deptno,d.dnamefrom emp e,dept dwhere e.deptno = d.deptnoand rownum < 5;

  修改表中部分ename使其和emp表中資料不同

   對比emp_dept表和emp,dept表串連查詢的結果如下:

select *from (select e.empno,e.ename,d.deptno,d.dnamefrom emp e,dept dwhere e.deptno = d.deptno) s, emp_dept edwhere ed.empno(+) = s.empno;

  使用merge將emp,dept表串連查詢出的結果插入到emp_dept表中

merge into emp_dept d--第一資料集:被插入資料的表using (select e.empno,e.ename,d.deptno,d.dnamefrom emp e,dept dwhere e.deptno = d.deptno) s--第二資料集on (d.empno = s.empno)--d和s表的關聯when matched then   update  set d.ename = s.enamewhen not matched then   insert (empno,ename,deptno,deptname)  values(s.empno,s.ename,s.deptno,s.dname);commit;--必須提交事務,否則無法看到資料

  在做聯集查詢結果如下:

 

oracle——merge

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.