日期:2014-05-16 浏览次数:20519 次
1、问题背景:该问题是在做Data Stage时引出来的一个问题,必须使用Merge Into的时候会浪费很多NextVal。
2、测试前提:创建脚本。
-- 创建源表 create table sourceTest( id int, name varchar2(100), seq_value int, t_stamp date ); -- 创建目标表 create table targetTest( id int, name varchar2(100), seq_value int, t_stamp date ); -- 创建sequence create sequence seq_test minvalue 1 maxvalue 999999 increment by 1 cache 40 nocycle; -- 添加测试数据 insert into sourceTest(id,name,t_Stamp) values(null,null,sysdate); insert into sourceTest(id,name,t_Stamp) values(1,'one',sysdate - 1); insert into sourceTest(id,name,t_Stamp) values(2,'two',sysdate - 2); insert into sourceTest(id,name,t_Stamp) values(3,null,sysdate - 3); insert into sourceTest(id,name,t_Stamp) values(null,'four',sysdate + 1); commit;
?3、测试
merge into targetTest t using (select id, name,seq_value,t_stamp from sourceTest) s on (s.id = t.id and s.name = t.name) when matched then ? update set t.seq_value = s.seq_value, t.t_stamp = sysdate when not matched then ? insert (id, name, seq_value,t_stamp) values (s.id, s.name,test.seq_test.nextval,s.t_stamp);
??第一次执行,结果:
??
??? | ID | NAME | SEQ_VALUE | T_STAMP |
1 | one | 1 | 2012-11-17 下午 03:11:46 | |
2 | 2 | 2012-11-18 下午 03:11:46 | ||
3 | 3 | 3 | 2012-11-15 下午 03:11:46 | |
4 | four | 4 | 2012-11-19 下午 03:11:46 | |
5 |
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|