Исходя из того, что я понимаю, ответ, в широком смысле, "нет", но вот проблема:
Мне нужно выполнить запрос, который должен сделать следующие вещи:
- Выберите строки в таблице, отсортированные по столбцу
- Из этих строк выберите и заблокируйте первую, пропуская другие заблокированные строки.
Пример запроса будет выглядеть примерно так это:
SELECT
E.*
FROM
polled_table E
WHERE
E.ID IN
(SELECT ID FROM
(SELECT
ID
FROM
polled_table
WHERE
condition = 'value'
ORDER BY priority DESC)
WHERE rownum < 2)
FOR UPDATE SKIP LOCKED;
Это, конечно, не работает в том смысле, что пропущенный блокированный по существу не работает, так как эта часть запроса только когда-либо видит одну строку.
Приведение «rownum <2» снаружи не представляется возможным (это вызывает ошибки, описанные, например, здесь: <em> ORA-00907 Отсутствует проблема с правой круглой скобкой - выберите по порядку с помощью внутреннего запроса вставки )
Я пробовал несколько комбинаций, но они либо не выполняют то, что я хочу, либо они прямо генерируют ошибки. Единственное, что может сработать, - это удалить условие rownum, но это заблокирует большое количество строк.
На данный момент, как я уже говорил, я думаю, что это будет сделано, а не как один запрос как минимум.