Пропуск заблокированных строк в Oracle - PullRequest
0 голосов
/ 25 апреля 2018

Я обновляю получение первой строки таблицы, используя select для UPDATE NOWAIT.
SELECT * from table where rownum=1 for UPDATE NOWAIT;
Здесь работают несколько экземпляров одного и того же процесса.Поэтому следующий экземпляр может получить заблокированную таблицу поиска.
Как я могу пропустить заблокированные строки здесь?

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Часть "где rownum = 1" работает не так, как задумано.Кажется, что предложение «для обновления пропущено заблокировано» оценивается после предложения «где».Таким образом, сначала вы выбираете запись, которая может вам понадобиться, а , затем , вы можете пропустить заблокированные.К сожалению, я не понимаю, как можно реализовать что-то вроде «дай мне первый разблокированный» с помощью всего одного запроса.

0 голосов
/ 25 апреля 2018

Это очень просто:

select * from table where rownum=1 for update skip locked;

Я не знаю, как будет работать фильтр rownum, я думаю, что второй читатель получит первую бесплатную запись (не заблокированную), но это также может означать, что он не получит хитов. Попробуй!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...