1.建测试表语句
CREATE TABLE MERGE_DATA_DEMO1
(
ID1 VARCHAR2(32),
NAME1 VARCHAR2(100)
);
COMMENT ON TABLE MERGE_DATA_DEMO1 IS '测试merge函数demo1表';
CREATE TABLE MERGE_DATA_DEMO2
(
ID2 VARCHAR2(32),
NAME2 VARCHAR2(100)
);
COMMENT ON TABLE MERGE_DATA_DEMO2 IS '测试merge函数demo2表';
2.向表中批量插入10000条测试数据,
begin
for i in 1 .. 10000 loop
INSERT INTO "NEW_TEMP"."MERGE_DATA_DEMO1" ("ID1", "NAME1") VALUES (i, 'name_' || i);
INSERT INTO "NEW_TEMP"."MERGE_DATA_DEMO2" ("ID2", "NAME2") VALUES (i, null);
end loop;
end;
查询验证数据是否插入:
3.使用普通sql批量变更"MERGE_DATA_DEMO2"中的name值,
:如果"demo1"中"id1"值和"demo2"和"id2"相同,则变更"demo2"中的"name2"值为"demo1"中的"name1".
update MERGE_DATA_DEMO2 demo2 set demo2.NAME2 = (select demo1.NAME1 from MERGE_DATA_DEMO1 demo1 where demo2.ID2 = demo1.ID1);
执行结果:批量更新成功,使用时间了1分钟743毫秒
4.将"DEMO2"中的"name2"置空,
update MERGE_DATA_DEMO2 set NAME2 = null ;
5.使用"merge into"函数批量更新.
:如果"demo1"中"id1"值和"demo2"和"id2"相同,则变更"demo2"中的"name2"值为"demo1"中的"name1".
执行结果:批量更新成功,使用时间104毫秒
结果显而易见,批量更新操作中使用"merge into"函数 效率要远远大于普通update语句.数据量越大,使用时间也越明显!
ps:原本我想用1000000条数据测试来着,结果普通update跑了10分钟还没跑完...我就偷偷缩小数据量了(偷笑)