【发布时间】:2019-03-21 06:10:58
【问题描述】:
我有一个表格,其中有列
Task_Track
- TaskID 编号(PK AutoGeneratedSequence)
- TaskCd Varchar2
- RefCd Varchar2
- RefID varchar2
- 参数 varchar2
- ...等
我正在处理一个场景,我在此表上运行选择查询以获取结果集。
Select * from Task_Track where RefCd = ?和 RefID = ?和 TaskCd = ?;
如果我没有任何结果,我将插入一个带有 RefCd RefID TaskCd 参数值的新任务。参数通常是与任务相关的 person_id。 如果我得到结果集,我将附加新参数并更新结果集。
if(resultset!=null and resultSet.length()>0)
更新参数逻辑
其他
插入新的任务逻辑。
这在连续运行中按预期工作。 但是当我运行 2 个并行队列并同时获得相同的 RefCd RefID TaskCd 值时。 我的第一个存储桶正在查找结果集并将按预期执行更新逻辑,但第二个队列无法找到结果并进入插入逻辑。
据我了解,即使第一个队列已锁定更新行,如果第一个队列尚未释放锁,则第二个队列不应有任何读取问题,并且由于锁而更新时应该失败.但是我的读取本身失败了,它没有抛出任何异常,而是返回一个空的结果集(长度 = 0)。因此,它正在进入插入逻辑。
读取是否可能受到并行更新的影响?如果是,我应该如何解决?
注意:我在 Websphere 9 中使用 Oracle 11G 和 Java8
谢谢
【问题讨论】: