手机版

oracle分页中遇到的rownum问题:通过以下方式增加订单的唯一性

时间:2021-08-03 来源:互联网 编辑:宝哥软件园 浏览:

类型:过滤插件大小:3.7M语言:英语评分:5.0标签:立即下载。昨天项目完成后,测试显示分页查询似乎不起作用。翻到第4页后,数据结果是一样的。

当时我觉得很疑惑。这是不可能的。分页组件应该不错。为什么会有问题?带着疑问,我打开自己的ide,在自己的机器上运行,但是出现了问题。

如果有问题,寻找它:

首先,打印出两个查询结果相同的sql,并在数据库中执行它们:

sql1:select *from (select t.*,rownum rnfrom (select t_e_id,t_e_name,t_e_tel,t _ e _ area code from(select t . Eid t _ e _ id,t.ename t_e_name,t.etel t_e_tel,t.areaid t_e_areacode,t.biz_delete_time,decode(areaid,' 0730 ',' 0 ',' 1 ')order seq from VR _ enterprise t here t . Eid不在(中

sql2:select *from (select t.*,rownum rnfrom (select t_e_id,t_e_name,t_e_tel,t _ e _ area code from(select t . Eid t _ e _ id,t.ename t_e_name,t.etel t_e_tel,t.areaid t_e_areacode,t.biz_delete_time,decode(areaid,' 0730 ',' 0 ',' 1 ')order seq from VR _ enterprise t here t . Eid不在(中

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

为了找出问题,我们只需要一步一步地简化sql,看看问题出在哪里。

所以我发现当问题出现在where rownum18中时,数据发生了变化。为什么添加了where条件后结果会改变?

说想不通。

我没办法。我不得不买下它。我买了很久了,但是没有人给我解释。

后来我同事说,试试另一种写法,于是我把另一种写法改成了如下:select * from (select t. *,rownum rn from (select t _ e _ id,t _ e _ name,t _ e _ tel,t _ e _区号from (select t. Eid t _ e _ id,t.ename t_e_name,t.etel t_e_tel,t.areaid t_e_areacode,t.biz_delete_time),decode(areaid,' 0730 ',' 0 ',' 1 ')order Sese

这个方法真的有效,而且有效。关键是为什么之前的方法不行。弄清问题的真相。

看来百度不行了,只好换谷歌搜索了。看,看,看。汤姆在甲骨文的《问汤姆》中详细介绍了rownum的用法,网址是http://www . Oracle.com/technetwork/issue-archive/2006/06-sep/o56 ask Tom-086197.html。

使用这种分页查询的一个重要之处是ORDER BY语句应该按唯一的东西排序。如果您订购的东西不是唯一的,您应该在订单的末尾添加一些东西来使它成为唯一的。

看到这句话,在使用order by的时候需要增加order by的唯一性,否则rownum会有问题。哇,哈哈哈,我太开心了。功夫不花你什么钱。如果你找到了问题的症结,你就能解决它。

这个权利是一个故障排除的经验,我在此记录下来。看来谷歌还是比百度强很多。以后最好学好英语,否则问题就解决不了。

版权声明:oracle分页中遇到的rownum问题:通过以下方式增加订单的唯一性是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。