日期:2014-05-17  浏览次数:21183 次

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

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

------解决方案--------------------
给你个例子,假设a表是正式表;b是临时表。假设你的主键slcct上建立了sequence为seq_slcct,如果没有你先建个;
写个过程,循环取得b表数据,插入a表,如果有唯一性限制,会抛出异常,忽略异常,继续下一条数据。

SQL code
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;

------解决方案--------------------
SQL code

merge into 解决问题