数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

oracle 分页问题解决方案


发布日期:2018年08月17日
 
oracle 分页问题解决方案

昨天做完项目后让测试测试了一把测试说分页查询貌似不起作用翻到第页以后看到的数据结果都是相同的

当时我就觉得很纳闷不可能啊分页组件应该是好的咋可能有问题呢带着疑问我打开了自己的ide在自己的机器上跑了一把果然有问题

有问题就要找问题

首先把条查询结果相同的sql打印出来到数据库中执行

sql

复制代码 代码如下:

select *

from (select t* rownum rn

from (select t_e_id t_e_name t_e_tel t_e_areacode

from (select teid t_e_id

tename t_e_name

tetel t_e_tel

tareaid t_e_areacode

_delete_time

decode(areaid ) orderseq

from vr_enterprise t

where teid not in (select eid from t_biz_erelation))

order by orderseq biz_delete_time nulls last) t

where rownum < )

where rn >=

sql

select *

from (select t* rownum rn

from (select t_e_id t_e_name t_e_tel t_e_areacode

from (select teid t_e_id

tename t_e_name

tetel t_e_tel

tareaid t_e_areacode

_delete_time

decode(areaid ) orderseq

from vr_enterprise t

where teid not in (select eid from t_biz_erelation))

order by orderseq biz_delete_time nulls last) t

where rownum <)

where rn >=

结果显示大多数行是相同的

为了找到问题所在只有先一步一步的精简化sql看在哪一步出的问题

于是找到了问题出现在where rownum<的时候数据改变了为什么加了个where条件结果就会变呢?

表示想不通啊

没办法只好baidu了baidu了半天都没人给个解释啊

后来同事说换个写法试试于是改了另一种写法如下

复制代码 代码如下:

select *

from (select t* rownum rn

from (select t_e_id t_e_name t_e_tel t_e_areacode

from (select teid t_e_id

tename t_e_name

tetel t_e_tel

tareaid t_e_areacode

_delete_time

decode(areaid ) orderseq

from vr_enterprise t

where teid not in (select eid from t_biz_erelation))

order by orderseq biz_delete_time nulls last) t)m

where mrn >= and mrn <

这个方法果然凑效凑效是凑效关键是为什么前面那种方法不行呢?抓问题要刨根问底

看来baidu不行得换google搜索了google搜索总是喜欢被china government墙掉没办法网上只好找了个chrome插件才解决了

找呀找找呀找在oracle的ask tom上tom详细的介绍了rownum的用法在这里l

One important thing about using this pagination query is that the ORDER BY statement should order by something unique If what you are ordering by is not unique you should add something to the end of the ORDER BY to make it so

看到这样一句话原来用order by的时候还需要增加order by的唯一性不然rownum就会有问题哇哈哈哈太开心了功夫不费有心人呀找到问题的症结了当然就好解决了

这权当是一次排错的经历特此记录下来看来google还是比baidu强大很多啊以后要好好学英文不然遇到问题没发解决

上一篇:oracle数据库删除数据Delete语句和Truncate语句的使用比较

下一篇:oracle em 按钮乱码解决办法及em网页变成英文