oracle 一张正式表中有一个主键slcct ,且为自增的,表中有数据,设置了数据唯一性限制(sla,res,area三个字段确定的数据唯一),临时表中没有slacct主键,要将临时表中的数据导入到正式表中,要保证主键slacct自动生成且自增,还要求保证数据的唯一性限制,导入的数据要求正式表中没有sla,res,area三个字段完全相同的数据!
求高手帮忙提供一个存储过程,在线等。。

解决方案 »

  1.   

    过程就不写了,给你思路:1、把正式表中sla,res,area 和临时表中sla,res,area 相同的记录先 挑选出来,把不重复的直接插入正式表
    2、把正式表中的自增的字段的最大值 抓取出来,(oracle中的自增是通过 sequence 实现的),在临时表数据导入正式表之前,要保证正式表没有新增数据
    3、以第2步抓取的 最大值作为 起始值 创建一个sequence ,利用新建的sequence.nextval 的值和临时表的数据一起 加入正式表 
      

  2.   

    给你个例子,假设a表是正式表;b是临时表。假设你的主键slcct上建立了sequence为seq_slcct,如果没有你先建个;
    写个过程,循环取得b表数据,插入a表,如果有唯一性限制,会抛出异常,忽略异常,继续下一条数据。begin
      for rec in (select * from b) loop
      begin
        insert into a(slcct,sla,res,area)
        values (seq_slcct.nextval, rec.sla, rec.res, rec.area);
      exception
        when others then null;
      end;
      end loop;
    end;
      

  3.   


    merge into 解决问题