6

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;

ただし、これら2つの概念を一緒にマージすることはできません

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.

readpast ロックで上位 N を選択するにはどうすればよいですか?

4

1 に答える 1

3

これは機能しますか?

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;
于 2010-10-15T04:01:17.557 に答える