各位大侠,因需要数据同步,需要从sql 表里 用自动任务 批量插入记录到 oracle 里,oracle里的序列怎么处理啊,根据插入时的记录条数,能保证在插入时的序列值不重复呢例如: SQL中有表 a 字段 A1,A2,A3,A4 记录条数,在每次自动任务执行时不等。
oracle 表 b 字段 ID ,B1,B2,B3,B4 S_ID 为oracle的序列
需要定时的将SQL 表里数据插入 oracle 里 。插入时怎么处理ID取值啊~~~~~~~
用 SELECT S_ID.nextval FROM dual ,多条记录插入时,id 就是重复了
oracle 表 b 字段 ID ,B1,B2,B3,B4 S_ID 为oracle的序列
需要定时的将SQL 表里数据插入 oracle 里 。插入时怎么处理ID取值啊~~~~~~~
用 SELECT S_ID.nextval FROM dual ,多条记录插入时,id 就是重复了
insert into b(s_id,...) values(S_ID.nextval,...);
写个存储过程,定义两个变量v_num1 用于保存插入前b表中的行数,v_num2用于保存每次要插入的表a的行数。然后借助rownum,用循环的方法,for i in 1..V_num2逐行的查出表a中的记录,插入b表时,其中的 ID 取v_num1+i.因为每次的i是在不断的增大,所以表b中的id也是慢慢的变大,是绝不会重复的。
cursor mycur is
select * from t1;
tmpcur mycur%rowtype;
begin
for tmpcur in mycur loop
insert into t2 values(s_id.nextval,cc.c1,cc.c2);
end loop;
commit;
end;
/
个人浅见:可以先把sqlserver表中的数据插入到oracle中的一个临时表里,这里假设为t1,t1的结构不含ID列,插入之后,再执行下面的一段代码,利用隐式游标,把t1的数据插入到最终的目标表t2declare
cursor mycur is
select * from t1;
tmpcur mycur%rowtype;
begin
for tmpcur in mycur loop
insert into t2 values(s_id.nextval,.tmpcur.c1,tmpcur.c2);
end loop;
commit;
end;
/
id number(4),
name varchar2(20)
)
insert into test1 values('2','b')
create table test2 as select * from test1
create sequence se_test start with 3 increment by 1
insert into test1(id,name) select se_test.nextval,name from test2
select * from test1
大体这样试试