1. 程式人生 > 實用技巧 >Oracle—merge into語法

Oracle—merge into語法

oracle的merge into語法,在這種情況下:

基於某些欄位,存在就更新,不存在就插入:
不需要先去判斷一下記錄是否存在,直接使用merge into

merge into 語法:

MERGE INTO table_name alias1
USING (table|view|sub_query) alias2
ON (join condition)
WHEN MATCHED THEN
    UPDATE SET col1 = col_val1,
           col2 = col_val2
WHEN NOT MATCHED THEN
    INSERT (column_list) VALUES (column_values);

具體就是:

MERGE INTO T T1
USING (SELECT '1001' AS a,2 AS b FROM dual) T2
ON ( T1.a=T2.a)
WHEN MATCHED THEN
   UPDATE SET T1.b = T2.b
WHEN NOT MATCHED THEN
   INSERT (a,b) VALUES(T2.a,T2.b);

簡單總結一下:

  目標表 T1,是需要更新或者插入的表,T2 是源資料表,使用T2表的資料去更新T1表,條件是,T1的欄位“a” 等於 T2的欄位“a”,

  如果匹配,執行“UPDATE SET T1.b = T2.b”

  如果不匹配,執行“INSERT (a,b) VALUES(T2.a,T2.b)”

注意固定寫法:
  1、useing 後面是括號,內容是源資料表 
  2、Update 後面不用加表名
  3、Inser 後面不用加 “into 表名”

注:在一個同時存在Insert和Update語法的Merge語句中,總共Insert/Update的記錄數,就是Using語句中T2的記錄數

轉自:oracle merge into語法