oracle 中 Merge into 新增更新语句

适用场景: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'就会报错

posted @ 2019-11-06 17:28  蓝色丶格调  阅读(541)  评论(0编辑  收藏  举报