Выберите top N с помощью" FOR update skip locked " в Oracle
в Oracle я могу выбрать первое сообщение 1 в отсортированной таблице с
select messageid from(
select
messageid,
RANK() over (order by messageid asc) as msg_rank
from messages
) where msg_rank=1;
и, как я обнаружил в предыдущий вопрос Я могу выбрать строку исключительно с
select * from messages where rownum < 2 for update skip locked;
Я не могу объединить эти два понятия вместе
select messageid from(
select
messageid,
RANK() over (order by messageid asc) as msg_rank
from messages
) where msg_rank=1 for update skip locked;
-- results in error
-- ORA-02014: cannot select FOR UPDATE from view with DISTINCT, GROUP BY, etc.
как я могу выбрать верхний N с блокировкой readpast?
1 ответов
будет ли это работать?
select messageid from messages
where messageid in (
select messageid from(
select
messageid,
RANK() over (order by messageid asc) as msg_rank
from messages
) where msg_rank=1
)
for update skip locked;