解释:有 2 个任务 A 和 B,分别每天和每月安排。
任务性质:
- 所有任务都有一个唯一的 seq_number 分配给它。
- 该编号是使用存储任务的表中的 MAX(seq_number)+1 分配的。
- 一旦任务完成并且日期已更改为安排下一个任务,旧任务将被删除并添加新的 1。
- 在下一个计划之前,旧的任务记录将被保留。
- seq_number 是存储这些记录的表的主键。
例如。任务 A 计划于 2016 年 6 月 30 日,seq_number 为 1,任务 B 计划于 2016 年 6 月,seq_number 2。一旦 2016 年 6 月 30 日的任务 A 完成,其将被删除,并将为 01-7 月添加一个新任务-2016 seq_number 3。直到 7 月底,任务 A 将继续删除 seq_number 3 记录,并在第二天添加另一个 seq_number 3 的任务 A。一旦我们到达 7 月底,任务 B 将被删除并添加 seq_number 4 . 现在,当任务 A 计划于 2016 年 8 月 1 日进行时,它将占用 seq_number 5。
如您所见,seq_number 不断增加,总有一天会达到上限。
我的解决方案:
我们可以随机获取范围内的任何数字并分配,而不是取 max +1。如果我们得到主键唯一约束错误,那么我们可以再次在循环中随机找到另一个数字,直到找到一个空闲的数字。
请提供可行的方法来解决此问题。欢迎所有想法。
编辑: seq_number 列是 NUMBER(6) 并且不能轻易更改。该解决方案应该能够重用 seq_numbers。