oracle--merge into :匹配则更新不匹配则插入

merge into :匹配则更新不匹配则插入

--语法
merge into 目标表
using (增量)
on (匹配字段)
where matched then update set --update和sel直接不需要加表名
when not matched then insert values--insert和values之间不需要加into 表名

例子

create or replace procedure sp_ods_partition_emp_bak(
p_start_time varchar2,
p_end_time varchar2
)
IS
v_start_time varchar2(30) := p_start_time;
v_end_time varchar2(30) := p_end_time;

BEGIN 
	merge into ods_merge_emp_target t
	using  (select * from ods_merge_emp)s
	on (s.empno=t.empno)
	where matched then update set 
--t.empno=s.empno,(匹配字段不能更新)
	t.ename=s.ename,
	t.job=s.job,
	t.mgr=s.mgr,
	t.sal=s.sal,
	t.comm=s.comm,
	t.deptno=s.deptno
	when not matched then insert values(	
	s.empno,
	s.ename,
	s.job,
	s.mgr,
	s.sal,
	s.comm,
	s.deptno);
COMMIT;--增删改必须提交代码
end;
create or replace procedure sp_ods_partition_emp_bak(
p_start_time varchar2,
p_end_time varchar2
)
IS
v_start_time varchar2(30) := to_date(p_start_time),'yyyymmdd');
v_end_time varchar2(30) := to_date(p_end_time),'yyyymmdd');

BEGIN 
	merge into ods_merge_emp_target t
	using  (select * from ods_merge_emp where create_time=v_start_time)s
	on (s.empno=t.empno)
	where matched then update set 
--t.empno=s.empno,(匹配字段不能更新)
	t.ename=s.ename,
	t.job=s.job,
	t.mgr=s.mgr,
	t.sal=s.sal,
	t.comm=s.comm,
	t.deptno=s.deptno,
	t.create_time=s.create_time
	when not matched then insert values(	
	s.empno,
	s.ename,
	s.job,
	s.mgr,
	s.sal,
	s.comm,
	s.deptno
	s.creat_time);
COMMIT;--增删改必须提交代码
end;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值