关于数据库将临时表中数据导入正式表中问题
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 解决问题