适用场景:oracle 中判断数据是否存在如果存在即更新反之新增 (提高效率)
语法:
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); --业务介绍:产品表中如果存在产品编号id为7的则将订单名称改为00005不存在则新增 merge into CM_CU_PRODUCT_COPY a using (select '7' as pid from dual) s on (a.pid = s.pid) when matched then update set a.order_name = '00005' when not matched then insert (PID, order_name, order_id,create_time) values ('7', '00005', '2',sysdate)
注意事项:
1、 USING () 这里面的子查询请使用dual 伪表且保证有数据,不存在数据的时候meger into 将不会执行insert / update 操作
2、更新的字段不能是on 中关联的字段 会报错。 也就是说改变上面的例子为 update set a.id ='xxxx'就会报错