在Oracle中,我可以选择排序表中的前1条消息
select messageid from(
select
messageid,
RANK() over (order by messageid asc) as msg_rank
from messages
) where msg_rank=1;
Run Code Online (Sandbox Code Playgroud)
select * from messages where rownum < 2 for update skip locked;
Run Code Online (Sandbox Code Playgroud)
但是我无法将这两个概念合并在一起
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.
Run Code Online (Sandbox Code Playgroud)
如何通过readpast锁定选择前N个?
我想锁定表中的一条记录.记录被指定为"ID大于......的下一个"
CREATE TABLE test (id number);
SELECT id
FROM (SELECT id
FROM test
WHERE id > 10
ORDER BY id)
WHERE ROWNUM = 1
FOR UPDATE;
Run Code Online (Sandbox Code Playgroud)
这似乎直观而容易.但事实并非如此.有任何想法吗?
PS
我确实需要现有的查询保持不变,因为它是一个游标,有几个地方使用这个游标的%rowtype.