关于数据库将临时表中数据导入正式表中问题

如风如雨 2012-10-11 03:46:06
oracle 一张正式表中有一个主键slcct ,且为自增的,表中有数据,设置了数据唯一性限制(sla,res,area三个字段确定的数据唯一),临时表中没有slacct主键,要将临时表中的数据导入到正式表中,要保证主键slacct自动生成且自增,还要求保证数据的唯一性限制,导入的数据要求正式表中没有sla,res,area三个字段完全相同的数据!
求高手帮忙提供一个存储过程,在线等。。
...全文
592 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
BenChiM888 2012-10-11
  • 打赏
  • 举报
回复

merge into 解决问题


fw0124 2012-10-11
  • 打赏
  • 举报
回复
给你个例子,假设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;
如风如雨 2012-10-11
  • 打赏
  • 举报
回复
求过程。。。没写过数据库代码,不会写。。。现在急用。。。
软件钢琴师 2012-10-11
  • 打赏
  • 举报
回复
过程就不写了,给你思路:1、把正式表中sla,res,area 和临时表中sla,res,area 相同的记录先 挑选出来,把不重复的直接插入正式表
2、把正式表中的自增的字段的最大值 抓取出来,(oracle中的自增是通过 sequence 实现的),在临时表数据导入正式表之前,要保证正式表没有新增数据
3、以第2步抓取的 最大值作为 起始值 创建一个sequence ,利用新建的sequence.nextval 的值和临时表的数据一起 加入正式表

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧