当前位置: 代码网 > it编程>数据库>Oracle > Oracle插入数据时出现ORA-00001:unique constraint问题

Oracle插入数据时出现ORA-00001:unique constraint问题

2024年05月15日 Oracle 我要评论
背景后台服务测试过程中,发现往oracle数据库表中插数据出现一个错误unique constraint如下:### error updating database. cause: java.sql.

背景

后台服务测试过程中,发现往oracle数据库表中插数据出现一个错误 unique constraint

如下:

### error updating database.  cause: java.sql.sqlintegrityconstraintviolationexception: ora-00001: unique constraint (test53.sys_c0032604) violated
### the error may exist in class path resource [sqlmapper/acmclaimmapper.xml]
### the error may involve com.las.core.dal.dao.acmclaimmapper.insert-inline
### the error occurred while setting parameters
### sql: insert into tbl_acm_claim ( seq_no, acct_no, fund_channel,status,create_date,csm_name,csm_card,loan_date,loan_amt ) values ( ?,?,?,?,?,?,?,?,? )
### cause: java.sql.sqlintegrityconstraintviolationexception: ora-00001: unique constraint (test53.sys_c0032604) violated
; sql []; ora-00001: unique constraint (test53.sys_c0032604) violated
; nested exception is java.sql.sqlintegrityconstraintviolationexception: ora-00001: unique constraint (test53.sys_c0032604) violated

原因

根据提示的索引号,找到了表中的字段“seq_no”

发现是因为测试数据库是由另一个数据库同步过来的,表中自动的序列号被打乱

导致下一次插入数据的时候,sql自动生成的序列号所在的位子已经有了数据,所以导致了唯一约束错误。

当然数据的错误删除和人为的错误操作都会导致这个问题。

解决

首先,

我们可以查询一下这个表的序列号在什么位子(我的表为tbl_acm_claim):

select seq_acm_claim.nextval  from dual

不要随便执行这个sql,因为没执行一次,索引值都会自增+1;

查询到结果后,对比表中现有的数据,进行对比

如果表中seq_no的值大于查询到的值,就将把索引值进行更新,设定序列步长为100(一般都是1)

执行下面sql:

alter sequence seq_acm_claim increment by 100

注意:seq_acm_claim 是不是表名,还有就是索引值不能修改当前值,只能修改增加,不能减少。

提示:

  • 查询所有所有索引:
select * from user_sequences;
  • 删除索引:
drop sequence seq_acm_claim;
  • 创建索引:
create unique index seq_acm_claim on tbl_acm_claim(seq_no);

总结

删库到跑路,一秒就够。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com