各位大侠,因需要数据同步,需要从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 就是重复了 

解决方案 »

  1.   


    insert into b(s_id,...) values(S_ID.nextval,...);
      

  2.   

    建一个序列sequence,再建一个触发器,插入一条数据前触发一次,select ID.NEXTVAL from sys.dual
      

  3.   

    我的方法可能比较笨点,但肯定能实现你的要求。
     写个存储过程,定义两个变量v_num1 用于保存插入前b表中的行数,v_num2用于保存每次要插入的表a的行数。然后借助rownum,用循环的方法,for i in 1..V_num2逐行的查出表a中的记录,插入b表时,其中的 ID 取v_num1+i.因为每次的i是在不断的增大,所以表b中的id也是慢慢的变大,是绝不会重复的。
      

  4.   

    个人浅见:可以先把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,cc.c1,cc.c2);
      end loop;
      commit;
    end;
    /
      

  5.   

    更正代码,不好意思
    个人浅见:可以先把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;
    /
      

  6.   

    create table test1(
    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
    大体这样试试
      

  7.   

    declare  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;
      

  8.   

    1楼方法就可行,如果ID不是主键列,可以先设ID列为主键以避免重复,完成后再去掉主键