求助 oracle 主键冲突的检测效的问题

lp_grace 2014-09-26 02:38:37
向有主键的表中插入大量数据(千万级),会遇到主键冲突的问题,有两种办法可以捕获到主键冲突
1.自己判断主键冲突
select count(*) into v_cnt from table_name where primary_key = pk 
if v_cnt = 0 then
insert into table_name values(pk);
end if;


2.oracle判断主键冲突
直接将数据插入表中,出现冲突则捕获异常并且忽略进行下一条数据插入,没有则直接插入

第一种办法的效率要高于第二种方法,请教各位大神有没有什么更高效的办法?
...全文
445 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lp_grace 2014-10-07
  • 打赏
  • 举报
回复
上面这个链接有问题,重新发一个 http://www.oracledatabase12g.com/archives/11g-%E6%96%B0%E7%89%B9%E6%80%A7ignore_row_on_dupkey_index%E6%8F%90%E7%A4%BA.html
lp_grace 2014-10-07
  • 打赏
  • 举报
回复
有需要的人可以阅读这篇文章 http://www.oracledatabase12g.com ... 8F%90%E7%A4%BA.html
lp_grace 2014-10-07
  • 打赏
  • 举报
回复
引用 1 楼 bw555 的回复:
方案1用得应该是最多的,简单高效 也可以直接写insert语句,在where子句中判断是否需要插入
insert into table_name(primary_key)select pk from dual
where not exists (select 1 from table_name where primary_key = pk)
谢谢大神,这是目前发现的最快的方法了
卖水果的net 2014-09-27
  • 打赏
  • 举报
回复
方法 2 的效率比方法 1 要高,但是在实际写代码的时候,并不推荐使用,数据库异常了,并不好。
bw555 2014-09-26
  • 打赏
  • 举报
回复
方案1用得应该是最多的,简单高效 也可以直接写insert语句,在where子句中判断是否需要插入
insert into table_name(primary_key)select pk from dual
where not exists (select 1 from table_name where primary_key = pk)

3,492

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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