Oracle“order by”子句返回错误的顺序或结果丢失

时间:2013-10-22 11:07:32

标签: sql oracle jdbc oracle11g

在我的应用程序日志中,我可以看到查询结果正在迭代(使用JDBC ResultSet,没有任何花哨的东西),并且实际在表中的某些结果要么丢失,要么在结果集中显得太晚(我不确定是哪一个,因为如果发生这种情况,我经常会遇到主键违规。)

我的查询是:

select t.* from myschema.vm t order by id;

然而我在SQL Developer 中运行完全相同的查询时(当数据库没有更改时)我看不到这个问题,并且它只在我的应用程序中发生了大约一半的时间(我怀疑由于所有插入和更新导致表格发生变化,有时不会发生这种情况。“

其他要点:

  1. 我在使用另一个数据库连接进行更新,插入和潜在删除,而我正在迭代ResultSet。但是,这应该不重要,对吗?
  2. 我正在使用BoneCP进行连接池。
  3. 数据库编码为AL32UTF8。
  4. 为什么会这样?这让我发疯了!

2 个答案:

答案 0 :(得分:0)

无论您何时获取数据(或部分数据),Oracle执行查询时都会冻结结果集;因此,如果其他会话插入数据,您将在打开游标时找到(正确排序)仅已提交的行。

另外,我怀疑你创建了你的ID,对表中的当前值进行了一些评估,而不是使用序列或共享原子计数器,因此你得到了PK违规。

答案 1 :(得分:0)

此问题是由于用户错误造成的。我在另一台机器上运行了另一个应用程序副本,我忘记了这一点,同时也在更改数据库。