Oracle—merge into語法
阿新 • • 發佈:2020-11-24
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的記錄數