У меня есть несколько потоков, которые обрабатывают строки из одной и той же таблицы, которая фактически является очередью.
Я хочу, чтобы каждый ряд обрабатывался только одним потоком. Итак, я добавил столбец - «IsInProccess», и в операторе SELECT потоков я добавил «WHERE IsInProccess = 0».
Кроме того, я использую «SELECT FOR UPDATE», поэтому после того, как поток получит строку из таблицы, никакой другой поток не получит ее, пока не поместит 1 в «IsInProccess».
Проблема в том, что у меня много потоков, и во многих случаях происходит следующий сценарий:
Поток A выбирается с помощью «SELECT FOR UPDATE» из таблицы и получает номер строки. 1 . Перед изменением IsInProccess на 1 поток B выбирает таким же образом из таблицы и также получает строку № 1 . Oracle сохранить строку №. 1 в поток A сеанс и поток B не может изменить эту строку и вернуть ошибку - «Ошибка при получении».
Я хочу, чтобы при выборе какого-либо потока из таблицы Oracle возвращались строки, которые не были сохранены в другом открытом сеансе.
Могу ли я это сделать?