暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 仅通过一个会话从表中提取和删除记录

ASKTOM 2020-11-24
326

问题描述

你好,

我们有一个带有记录的表,其中包含必须批量填写的值,并且应该由客户端应用程序使用。
各种会话应读取并删除一条记录,并且必须保证只有一个会话使用一条记录。
我们尝试使用select进行更新,但存在锁定问题。

有没有另一种方法来 “消费” 记录,并具有只有会话获得相同记录的安全性?

问候
安德烈亚斯


专家解答

默认情况下,Oracle数据库具有语句级一致性。这意味着查询只能看到查询开始时提交的更改。

如果你有

select ... from tab
delete tab ...


同时运行的两个会话将选择同一行。

选择更新是为了帮助避免这个问题。第一个会话中的查询将阻止第二个会话,直到事务完成。这将导致某些会话相互阻塞,并且很难避免。

Is there another way to "consume" the records and have the security that only session gets the same record?

如果你想确保一行只被一个会话读取,我怀疑你想使用高级排队。如果你进一步解释why您正在尝试这样做,并给出我们可以进一步帮助的工作代码示例。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论