论坛首页 综合技术论坛

Oracle中慎用带有order by的分页

浏览 29120 次
精华帖 (1) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-11-17  
原先robin的文章:
http://www.hibernate.org.cn/58.html

现在在论坛里面怎么找到?
0 请登录后投票
   发表时间:2006-11-17  
ordey by的字段有很多重复,从这句看就已经存在不满足业务需求的可能了,不光是oracle,就算是其它数据库,都是一样的结果.
一厢情愿地猜测数据库会以固定的顺序来返回结果是不可取的.
在多用户环境下,就算以上问题不存在,同一条记录也会产生出多次在不同页面中出现的类似结果.
0 请登录后投票
   发表时间:2006-11-22  
winterchipmunk 写道
实践出真知,试一下就知道结果了。我说出错,既有oracle理论指导,又有自己试验的结果。

另外,你可以看一下上面提到的hibernate手册中的scroll的示例,似乎也在表示order by的时候,怎么分页。

xiaoyu 写道
引用
select * from
( select row_.*, rownum rownum_ from
( select * from T_TABLE tTable where tTable.field1 order by tTable.field2 desc ) row_ where rownum <= ?) where rownum_ > ?


我有一个疑问:虽然rownum是在order by之前已经安排好了,但它是不是指仅在一个视图中呢?如果是的话,那这个语句一点都没有错,因为它用的是row_视图的rownum。但真是出错了(其实就是顺序有可能不一样),应该是它的排序算法有问题。

当然如果rownum是不重新分配的话(意思是指在一整个查询中),那就没有得说啦。



It works fine for me, It was tested on Oracle 10g.

Oracle add the row number to :
( select * from T_TABLE tTable where tTable.field1 order by tTable.field2 desc )
before sorting. You are right.

For second level query:
( select row_.*, rownum rownum_ from
( select * from T_TABLE tTable where tTable.field1 order by tTable.field2 desc ) row_ where rownum <= ? )
Oracle adds other rownum based on the first query results, so the result is good.
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics