求助 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判断主键冲突
直接将数据插入表中,出现冲突则捕获异常并且忽略进行下一条数据插入,没有则直接插入

第一种办法的效率要高于第二种方法,请教各位大神有没有什么更高效的办法?
...全文
279 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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)
  • 打赏
  • 举报
回复
相关推荐
发帖
Oracle 高级技术
加入

3438

社区成员

Oracle 高级技术相关讨论专区
申请成为版主
帖子事件
创建了帖子
2014-09-26 02:38
社区公告
暂无公告