在我的应用程序日志中,我可以看到查询结果正在迭代(使用JDBC ResultSet,没有任何花哨的东西),并且实际在表中的某些结果要么丢失,要么在结果集中显得太晚(我不确定是哪一个,因为如果发生这种情况,我经常会遇到主键违规。)
我的查询是:
select t.* from myschema.vm t order by id;
然而我在SQL Developer 中运行完全相同的查询时(当数据库没有更改时)我看不到这个问题,并且它只在我的应用程序中发生了大约一半的时间(我怀疑由于所有插入和更新导致表格发生变化,有时不会发生这种情况。“
其他要点:
为什么会这样?这让我发疯了!
答案 0 :(得分:0)
无论您何时获取数据(或部分数据),Oracle执行查询时都会冻结结果集;因此,如果其他会话插入数据,您将在打开游标时找到(正确排序)仅已提交的行。
另外,我怀疑你创建了你的ID,对表中的当前值进行了一些评估,而不是使用序列或共享原子计数器,因此你得到了PK违规。
答案 1 :(得分:0)
此问题是由于用户错误造成的。我在另一台机器上运行了另一个应用程序副本,我忘记了这一点,同时也在更改数据库。