oracle批量插入时,自动生成序列问题 返回

SqlSugar
22 112
该叫什么 Kawhi 发布于5天前
悬赏:5 飞吻

image.pngimage.png

批量插入多条数据时,取了序列但是使用的时候时加一来使用,而不是直接用取出来的序列值。如果oracle序列有缓存的情况存在则取出来的序列可能不是连续的,这样做偶尔就会发生数据库主键冲突的报错,反正都生成了,可以修改一下直接传回去用

热忱回答22

  • Kawhi Kawhi VIP0
    5天前

    而且取出来的序列用的是int类型,有可能会溢出

    0 回复
  • @Kawhi:这个版本的序列已经稳定了一年多了,并未出现过问题,你可以提供测试用例 

    0 回复
  • 批量是不支持直接用序列NEXT.VAL的,不然我这边也不去封装

    0 回复
  • Kawhi Kawhi VIP0
    5天前

    只要序列设置了缓存,取出的序列不是连续的,这样写肯定是有问题的。没办法提供测试用例,我这边也是偶尔会报主键冲突。昨天想彻底解决问题看源码才发现的

    0 回复
  • Kawhi Kawhi VIP0
    5天前

    @fate staimage.png

    0 回复
  • @Kawhi:你可添加事务在测试一下,连不连续都不影响我这边直接插入的是 数字

    0 回复
  • inertable   10  11 12  13 和你的序列已经没关系了, 最后修改序列的值

    0 回复
  • 不连续的应该不支持,我看了一下序列实现

    0 回复
  • image.png

    他是先读出生成的序列,赋值上去的

    0 回复
  • Kawhi Kawhi VIP0
    5天前

    @fate sta:最后插入的是10  11 12  13,还是序列里取出来的值?

    0 回复
  • 理论上不连续也支持的,因为不连续只会更大

    0 回复
  • Kawhi Kawhi VIP0
    5天前

    @fate sta:oracle序列设置了缓存,然后nextval的时候就有可能是不连续的

    0 回复
  • 目前这个版本序列还是很稳定的因用户已经稳定用了一年多,出现错的概率太低了,你添加事务测试一下, 多个表不要共用一个序列 ,如果还有问题必须提供测试用例

    0 回复
  • @Kawhi:连不连续无所谓的,因为他已经一次把批量的序列都读出来了,其他地方在读不会影响的

    0 回复
  • 也就是说这块序列已经被使用了  不连续数字只会更大

    0 回复
  • 比如读出来是 1  10  20 30  其他地方在读 31 32

    0 回复
  • 不会有影响

    0 回复
  • Kawhi Kawhi VIP0
    5天前

    @fate sta:但是他读出来了,他没有用啊。用的时候时取了第一个,后面的都是在第一个的基础上加一

    0 回复
  • @Kawhi: 读出一次就会序列就使用一次,我读了100次 那么 你不连读只会大于100 , 而我程序就用100不会有影响

    0 回复
  • image.png

    0 回复
  • Kawhi Kawhi VIP0
    5天前

    image.png

    0 回复
  • 集群雪花ID吧,你如果有回跳机质 那就不好支持了

    0 回复