Oracle之Merge用法

來源:互聯網
上載者:User

標籤:

Merge用來從一個表中選擇一些資料更新或者插入到另一個表中。而最終是用更新還是用插入的方式取決於該語句中的條件。下面我們簡單的舉一個例子: SQL> create table merge_test1(a number,b varchar2(20))表已建立。SQL> create table merge_test2(a number,b varchar2(20))表已建立。SQL> insert into merge_test1 values(1,‘A‘);已建立 1 行。SQL> insert into merge_test1 values(2,‘B‘);已建立 1 行。SQL> insert into merge_test1 values(3,‘C‘);已建立 1 行。SQL> insert into merge_test2 values(3,‘C‘);已建立 1 行。SQL> insert into merge_test2 values(2,‘C‘);已建立 1 行。SQL> commit;提交完成。 SQL> select * from merge_test1;         A B---------- --------------------         1 A         2 B         3 CSQL> select * from merge_test2;         A B---------- --------------------         3 C         2 C前面的準備工作之後,用Merge對 Merge_test2進行更新 MERGE INTO MERGE_TEST2 MUSING MERGE_TEST1 NON (M.A = N.A)WHEN MATCHED THEN UPDATE SET M.B = N.BWHEN NOT MATCHED THEN INSERT (M.A,M.B) VALUES (N.A,N.B); 更新後結果:SQL> select * from merge_test2;         A B---------- --------------------         1 A         3 C         2 B 總結:一、Merge 的用法大致上有三種:1、只更新不插入Merge into Merge_test2 MUsing Merge_test1 NON (M.A = N.A)WHEN MATCHED THENUPDATE SET M.B = N.B;2、只插入不更新MERGE INTO merge_test2 MUSING merge_test1 NON (M.A =N.A) WHEN NOT MATCHED THENINSERT (M.A,M.B) VALUES(N.A,N.B);3、既插入也更新MERGE INTO merge_test2 MUSING merge_test1 NON(M.A = N.A)WHEN  MATCHED THENUPDATE SET M.B=N.BWHEN NOT MATCHED THENINSERT (M.A,M.B) VALUES(N.A,N.B) 二、注意事項1、merge語句中,update不能用於更新串連的列(即ON(M.A = N.A))例如:MERGE INTO merge_test2 MUSING merge_test1 NON(M.A = N.A)WHEN  MATCHED THENUPDATE SET M.A=N.B ,M.B=N.BWHEN NOT MATCHED THENINSERT (M.A,M.B) VALUES(N.A,N.B) 我們執行上面的語句(注意紅色部分)就會有如下的提示:第 3 行出現錯誤:ORA-38104: 無法更新 ON 子句中引用的列: "M"."A" 2、Using 後面不一定是表:  文法文檔上寫著:table,view,subquery  也就是說也可以是一個查詢語句的結果集。 3、還有一種錯誤就是由於關聯的值不唯一引起的比如:在merge_test1中再插入一條資料。與之前的重複了!SQL> insert into merge_test1 values(3,‘d‘); 此時我們執行MERGE INTO merge_test2 MUSING merge_test1 NON(M.A = N.A)WHEN  MATCHED THENUPDATE SET M.B=N.BWHEN NOT MATCHED THENINSERT (M.A,M.B) VALUES(N.A,N.B)第 1 行出現錯誤:ORA-30926: 無法在源表中獲得一組穩定的行

 

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.