Oracle 的 merge 更新和插入操作

xz43發表於2011-01-14
使用merge比傳統的先判斷再選擇插入或更新快很多。
1)主要功能
提供有條件地更新和插入資料到資料庫表中
如果該行存在,執行一個UPDATE操作,如果是一個新行,執行INSERT操作
    — 避免了分開更新
    — 提高效能並易於使用
    — 在資料倉儲應用中十分有用

2)MERGE語句的語法如下:

MERGE [hint] 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;

3)使用merge的注意事項:on子句的使用的欄位不能夠用於update,即Oracle不允許更新用於連線的列。
 
4)例項如下:
首先,我們建立一個測試表(create table t_userobject as select object_id,object_name from user_objects where rownum<=100),然後透過merge的方式來維護該表的資料。根據object_id來匹配,能匹配上的,若object_name 不同(本例中不可能有該情況),則更新object_name;不能匹配上的,則直接新增該記錄。從而達到批次INSERT和UPDATE操作。
merge into t_userobject t
using (select object_id, object_name from user_objects) s
on (t.object_id = s.object_id)
when matched then
  update
     set t.object_name = s.object_name
   where t.object_name != s.object_name
when not matched then
  INSERT (object_id, object_name) VALUES (s.object_id, s.object_name);

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-683827/,如需轉載,請註明出處,否則將追究法律責任。

相關文章