gpt4 book ai didi

java - 如何重用 Oracle 主键列中的序列间隙?

转载 作者:行者123 更新时间:2023-12-01 23:57:53 26 4
gpt4 key购买 nike

我使用Oracle序列作为表的主键,并在Java应用程序中使用int映射这个主键,现在我发现我的客户已经达到表中的最大int,甚至序列可以连续增加。但是Java int已经无法存储它了,我不想将Java代码从int更改为long,因为成本非常大。然后我发现客户数据库中的 ID 列有很多很大的空白。有什么办法可以重新使用这些丢失的身份证号码吗?

如果可以在数据库级别执行此操作,例如我可以重新组织此序列以将这些缺失的数字添加到其中,因此无需更改 Java 代码,那么我就可以使用这些间隙。应该很棒。

我将编写一个函数来查找间隙范围,在获得这些数字之后,如果可以的话,我想将它们分配给序列值的池,所以也许从现在开始,它不会使用自动递增,只需使用我分配的号码。在Java代码中,我可以继续使用findNextNumber来调用序列。但序列将能够返回我分配给它的值。这似乎不可能,对吧?还有其他选择吗?

最佳答案

您的意思是,序列是否会返回“间隙”范围内的值?我不这么认为,除非您出于某种原因删除/重新创建它。我想您可以编写某种函数来查找表中的 PK 间隙,然后将这些间隙范围保存到另一个表中,并使用间隙表“滚动”您自己的序列函数。十分难看。尝试“恢复”这些差距听起来像是为了避免不可避免的情况而拼命尝试 - 您的 java PK 数据类型应该与 DB 数据类型保持一致。很久以前,我在一个VB应用程序中遇到了同样的问题,该应用程序的类键定义为16位整数,并且序列超过32K,不得不将变量更改为Long。我说,咬紧牙关,进行转变。现在的一点疼痛,会为你避免以后持续的很多疼痛。只是我的意见。

关于java - 如何重用 Oracle 主键列中的序列间隙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15312676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com