我使用的是springboot和oracle。
我有一个调度程序应用程序,它根据调度时间/有效时间从数据库中获取记录。应用程序每30秒从数据库获取一次记录。它不断地查看数据库中的以下情况,并将获取数据。
条件:当前时间>=计划时间(或)当前时间<有效时间
(请注意:db中的记录未订购)。即,我可能会将记录安排在下个月的顶部,现在安排的记录可能会在第一个100个记录之后提供。所以没有秩序。
我的问题是,根据我的情况,已经处理过的记录也正在被提取。
例如:
记录1:计划在未来10分钟内,有效期至未来10天
记录2:预定明天,有效期到下一个10天
记录3:现在预定,有效期10天。
我的进程现在只能获取记录3。但由于或条件,所有3条记录都被提取并处理。
我试着只处理记录3使用它的预定时间和其他条件,但当处理10分钟后,记录3来记录1。
有没有办法用java、oracle或sql更新获取和处理的记录?
我想用游标,但游标是按顺序工作的。所以运气不好。
请给一个最佳的解决方案来处理这个问题,因为我可能有成千上万的记录以同样的方式处理。
1条答案
按热度按时间yvfmudvl1#
你可以简单地使用
select ... from ... for update skip locked
. 在这种情况下,提取的行将被锁定,因为for update
每个select都将跳过锁定的行。或者你也可以用
update ... where ... set status='processed' returning ... bulk collect into {collection}
在plsql中,并将此集合返回(获取)到java应用程序。