熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

OracleMergeinto詳細介紹

2013-11-13 16:08:10  來源: Oracle 

  /*Merge into 詳細介紹

  MERGE語句是Oraclei新增的語法用來合並UPDATE和INSERT語句

  通過MERGE語句根據一張表或子查詢的連接條件對另外一張表進行查詢

  連接條件匹配上的進行UPDATE無法匹配的執行INSERT

  這個語法僅需要一次全表掃描就完成了全部工作執行效率要高於INSERT+UPDATE

  */

  /*語法

  MERGE [INTO [schema ] table [t_alias]

  USING [schema ] { table | view | subquery } [t_alias]

  ON ( condition )

  WHEN MATCHED THEN merge_update_clause

  WHEN NOT MATCHED THEN merge_insert_clause;

  */

  語法

  MERGE INTO [your tablename] [rename your table here]

  USING ( [write your query here] )[rename your querysql and using just like a table]

  ON ([conditional expression here] AND [])

  WHEN MATHED THEN [here you can execute some update sql or something else ]

  WHEN NOT MATHED THEN [execute something else here ! ]

  /*

  我們還是以《sql中的case應用》中的表為例在創建另兩個表fzq和fzq

  */

  全部男生記錄

  create table fzq as select * from fzq where sex=;

  全部女生記錄

  create table fzq as select * from fzq where sex=;

  /*涉及到兩個表關聯的例子*/

  更新表fzq使得id相同的記錄中chengji字段+並且更新name字段

  如果id不相同則插入到表fzq

  將fzq表中男生記錄的成績+女生插入到表fzq

  merge into fzq  aa     fzq表是需要更新的表

  using fzq bb            關聯表

  on (aaid=bbid)        關聯條件

  when matched then       匹配關聯條件作更新處理

  update set

  aachengji=bbchengji+

  aaname=bbname         此處只是說明可以同時更新多個字段

  when not matched then    不匹配關聯條件作插入處理如果只是作更新下面的語句可以省略

  insert values( bbid bbname bbsexbbkechengbbchengji);

  可以自行查詢fzq

  /*涉及到多個表關聯的例子我們以三個表為例只是作更新處理不做插入處理當然也可以只做插入處理*/

  將fzq表中女生記錄的成績+沒有直接去sex字段而是fzq和fzq關聯

  merge into fzq  aa     fzq表是需要更新的表

  using (select fzqidfzqchengji

  from fzq join fzq

  on fzqid=fzqid) bb  數據集

  on (aaid=bbid)        關聯條件

  when matched then       匹配關聯條件作更新處理

  update set

  aachengji=bbchengji+

  可以自行查詢fzq

  /*不能做的事情*/

  merge into fzq  aa

  using fzq bb

  on (aaid=bbid)

  when matched then

  update set

  aaid=bbid+

  /*系統提示

  ORA: Columns referenced in the ON Clause cannot be updated: AAID

  我們不能更新on (aaid=bbid)關聯條件中的字段*/

  update fzq

  set  id=(select id+ from fzq where fzqid=fzqid)

  where id in

  (select id from fzq)

  使用update就可以更新


From:http://tw.wingwit.com/Article/program/Oracle/201311/17876.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.