【发布时间】:2009-10-02 18:15:32
【问题描述】:
我有多个线程正在处理同一个表中的行,该表实际上是一个队列。
我希望每一行仅由一个线程处理。因此,我添加了一个列 - “IsInProccess”,并在线程 SELECT 语句中添加了“WHERE IsInProccess = 0”。 此外,我使用“SELECT FOR UPDATE”,因此在一个线程从表中获取一行之后,在将 1 放入“IsInProccess”之前,没有其他线程会得到它。
问题是我有很多线程,并且很多时候会发生以下情况: 线程 A 通过“SELECT FOR UPDATE”选择表格并获取行号。 1。在将 IsInProccess 更改为 1 之前,线程 B 以相同的方式从表中进行选择,并获得第 1 行。 Oracle 保存行号1 到线程 A 会话和线程 B 无法更改此行并返回错误 - “无法获取”。
我希望当某个线程从表中选择时,Oracle 将返回未保存到其他打开会话的行。
我可以这样做吗?
【问题讨论】:
标签: oracle