У меня есть большой набор данных в Oracle, который мне нужен для обработки некоторых строк со столбцом PROCESSED= 0
.
У меня есть несколько экземпляров приложения, которое будет читать по одной строке за раз и выполнять обработку. Чтобы избежать доступа нескольких потоков к одной и той же строке, я использую
SELECT * FROM FOO WHERE ROWNUM = 1 FOR UPDATE
Если я выполню приведенный выше запрос, первый поток заблокирует строку, а другие строки не смогут получить какие-либо строки, поскольку ROWUM = 1
уже заблокирован первым потоком. Чего я пытаюсь добиться, так это получить следующую разблокированную строку.
Есть ли эффективный способ сделать это через SQL?