今日测试来报此问题,
觉方案一太麻烦,
所以写了个懒人版,
江湖老中医,包治百病。
报错: ORA-00001: 违反唯一约束条件 (mes.SYS_C0020470)
原因:假设,序列化当前为61,但是表里已经被人为或者直接导入了61这个ID的数据,
那么,当基于序列化再次插入,则会报此问题
解决:
1:修改序列步长,此时步长为:当前库里最大ID值 - 序列ID值
2:记录当前缓存值,设置缓存为1(怕下一步获取很多导致ID异常)
3:执行如下SQL: 记得修改序列名,表名
目的:使序列自增,达到当前数据库ID最大值
- SELECT SEQ_PP_BLACKLIST.nextval
- FROM PP_BLACKLIST;
4:再插入即可。 这一次插入序列值ID会在最大ID值基础上+1
5:修改缓存为默认的20(改之前是多少,这里改多少,写20是因为oracal默认20)
- 删除序列,重建,开始值为必不可能重复的。
-
- CREATE SEQUENCE PP_RECEIVE_EXTERNAL_DATA_SEQ (记得改为在用的序列名)
- START WITH 1(这个值改为必不可能重复的。或者重读的值+1.)
- INCREMENT BY 1
- NOCACHE
- NOCYCLE;