我使用oracle 11gr2和插入新产品时的产品表我需要指定一个从1到65535的自动增量ID。然后可以删除产品。 当我到达65535时,我需要扫描表格以找到一个用于分配新ID的空闲孔。 因为我有这个要求oracle序列无法使用,所以我使用一个函数(也尝试插入触发器)以生成一个空闲的id ... 问题是我无法处理批量插入,例如我有并发问题...... 我该怎么解决这个问题?通过使用某种外部Id生成器?
答案 0 :(得分:0)
听起来像任意设计。是否有充分的理由拥有16位最大产品ID或重用ID?这两种限制都是不好的做法。
我怀疑任何外部发电机都将提供Oracle尚未提供的任何东西。我建议使用序列进行批量插入。您遇到的问题是如何回收ID。 Oracle普通序列不会跟踪主键,因此您需要一个解决方案来首先查找循环密钥,然后可能回退到序列。
产品ID回收
这可确保您在插入新序列ID之前始终循环使用
如果要在数据库中实现逻辑,可以创建一个视图(VIEW $ PRODUCTS),其中DELETED =' N'和一个INSTEAD OF INSERT触发器来执行插入。
在任何情况下,当您用完序列(或序列包装)时,您都不方便批量插入。如果我是你,我会重新考虑那部分设计。