Выберите верхний N с «для блокировки пропуска обновления» в Oracle

В Oracle я могу выбрать первое сообщение в отсортированной таблице с помощью

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?

6
задан Community 23 May 2017 в 11:51
поделиться