(包治百病)江湖老中医治疗oracal序列重复

今日测试来报此问题,

觉方案一太麻烦,

所以写了个懒人版,

江湖老中医,包治百病。

报错: 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;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值