【问题标题】:Oracle DB read next unlocked rowOracle DB 读取下一个未锁定的行
【发布时间】:2017-10-31 13:11:39
【问题描述】:

我在我的应用程序的三个不同实例上运行以下查询,它们都试图从表中逐一读取行作为队列。

SELECT * FROM order_request_status ors WHERE ors.status = 'new' and ROWNUM <= 1 order by ors.id asc for update skip locked 

现在的问题是,如果该行被一个应用程序实例锁定,我希望我的第二个应用程序实例通过查询读取下一个未锁定的行。但它不起作用 - 更新跳过锁定。

请建议我如何使用 oracle db 实现类似队列的功能。

【问题讨论】:

    标签: sql oracle locking oracle12c


    【解决方案1】:

    SKIP LOCKED 处理发生在查询返回行之后。由于ROWNUM&lt;=1,您的谓词在仅读取一条记录后停止,因此如果它找到的记录已被另一个会话锁定,您的查询将跳过它并停止查找更多记录。

    如果您只想一次处理一条记录,只需从游标中获取一条记录,而不是使用ROWNUM 来限制它。

    【讨论】:

    • 如何从游标中只获取一条记录?我正在使用 rownum 来限制它,所以我可以通过按升序排序 id 来获取系统中输入的第一条记录。
    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多