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

04-27 2924阅读 0评论

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;

免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,2924人围观)

还没有评论,来说两句吧...

目录[+]