oracle的merge into语法,在这种情况下:

基于某些字段,存在就更新,不存在就插入

不需要先去判断一下记录是否存在,直接使用merge into

oerge into 语法

MERGE INTO table_name alias1
USING (table|view|sub_query) alias2
ON (join condition)
WHEN MATCHED THEN
    UPDATE table_name
    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的记录数

posted on 2018-03-06 22:24  Flink菜鸟  阅读(1183)  评论(0编辑  收藏  举报