【发布时间】:2020-11-21 17:03:21
【问题描述】:
我正在使用 Spring Boot 和 Oracle。
我有一个调度程序应用程序,它根据预定时间/有效时间从数据库中获取记录。应用程序每 30 秒从数据库中获取记录。它会不断地在数据库中查找以下情况并获取数据。
条件:当前时间>=预定时间(或)当前时间
(请注意:数据库中的记录未排序)。即,我可能将记录安排在下个月,现在安排的记录可能在前 100 条记录之后可用。所以没有顺序。
我的问题是,根据我的情况,已经处理的记录也正在被提取。
例如:
-
记录 1:预定在未来 10 分钟内,有效期至未来 10 天
-
记录 2:预定明天,有效期至接下来的 10 天
-
记录 3:现在预定,有效期 10 天。
我的进程现在应该只获取记录 3。但由于 OR 条件,所有 3 条记录都被提取并正在处理中。
我尝试使用预定时间和其他条件仅处理记录 3,但是在 10 分钟后处理时,记录 3 带有记录 1。
有没有办法在 JAVA 或 Oracle 或 SQL 中更新获取和处理的记录?
我想过使用光标,但光标按顺序工作。所以没有运气。
请给出一个最佳解决方案来处理这个问题,因为我可能有数十万条记录需要以同样的方式处理。
【问题讨论】:
-
如果您不想要尚未计划的记录,为什么会有 OR 而没有 AND?如果你只想处理一次记录,你不应该有一个状态字段吗?
-
那些预定的记录可能会在以后被批准。所以我还必须检查有效期以处理它们。这就是我使用 OR 而不是 AND 的原因。我有一个状态字段,但这不会有任何好处。
-
如果有状态字段,为什么不排除已经处理的行?
标签: sql spring oracle spring-boot scheduler