您的位置:首页 > 数据库 > Oracle

oracle的Merge into语法应用

2013-08-15 09:16 393 查看
一、Merge into介绍 MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。
二、语法MERGE INTO [your table-name][rename your table here]USING ( [write your query here])[rename your query-sql and using just like a table]ON ([conditional expression here]AND [...]...)WHEN MATHED THEN [here you canexecute some update sql or something else ]WHEN NOT MATHED THEN [executesomething else here ! ]
三、实例应用
----------------------
--目标表
create table zbak_test_person(
id varchar2(32),
name varchar2(256),
heigh varchar2(8),
job_name varchar2(256)
);
----------------------
--插入目标表,测试数据
insert into zbak_test_person (id,name,heigh,job_name) values ('001','test','175','IT');
----------------------
--创建一个临时表,用于中转数据
create table zbak_test_person_temp(
id varchar2(32),
name varchar2(256),
heigh varchar2(8),
job_name varchar2(256)
);
----------------------
--插入临时表,测试数据
insert into zbak_test_person_temp (id,name,heigh,job_name) values ('001','test1','175','IT');
insert into zbak_test_person_temp (id,name,heigh,job_name) values ('002','test2','175','IT');
insert into zbak_test_person_temp (id,name,heigh,job_name) values ('003','test3','175','IT');
insert into zbak_test_person_temp (id,name,heigh,job_name) values ('004','test4','175','IT');
insert into zbak_test_person_temp (id,name,heigh,job_name) values ('005','test5','175','IT');
insert into zbak_test_person_temp (id,name,heigh,job_name) values ('006','test6','175','IT');
insert into zbak_test_person_temp (id,name,heigh,job_name) values ('007','test7','175','IT');
COMMIT;
----------------------
--merge into 语句
merge into zbak_test_person p
using (select id, name, heigh, job_name from zbak_test_person_temp) t
on (p.id = t.id)
when matched then
update set p.name = t.name, p.heigh = t.heigh, p.job_name = t.job_name
when not matched then
insert values (t.id, t.name, t.heigh, t.job_name);
commit;
----------------------
--验证数据是否更新成功
select * from zbak_test_person;
select * from zbak_test_person_temp;

本文出自 “萧逸轩” 博客,请务必保留此出处http://guibaobao.blog.51cto.com/908626/1273140
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: