相关疑难解决方法(0)

在Oracle中选择顶部N,"for update skip locked"

在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个?

sql oracle locking top-n

6
推荐指数
1
解决办法
3663
查看次数

如何解决ORA-02014:无法从DISTINCT,GROUP BY等视图中选择FOR UPDATE

我想锁定表中的一条记录.记录被指定为"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.

oracle locking sql-order-by ora-02014

3
推荐指数
1
解决办法
5181
查看次数

标签 统计

locking ×2

oracle ×2

ora-02014 ×1

sql ×1

sql-order-by ×1

top-n ×1