oracle 分页查询 rownum + order by,查询结果异常

发布于 2021-12-06 05:44:01 字数 1182 浏览 846 评论 0

逻辑SQL:

select * from ( select temp.*, rownum row_id from ( select logid,portal,moduleid,modulename,operid,opername,operip,content,logresult,failreason,createtime from sys_operlog order by createtime desc ) temp where rownum <= ?) where row_id > ?

 

分2库4个表:

a.sys_operlog_0, a.sys_operlog_1, b.sys_operlog_0, b.sys_operlog_2

用了框架Mybastis的PageInterceptor处理产生逻辑SQL。

 

异常结果:

正常查询出第一页数据,后续页数据不正常。

观察 逻辑SQL 被改写的结果,以第2页为例:

select * from ( select temp.*, rownum row_id from ( select logid,portal,moduleid,modulename,operid,opername,operip,content,logresult,failreason,createtime from sys_operlog_0 order by createtime desc ) temp where rownum <= 20) where row_id > 10

 

逻辑SQL去掉“order by createtime desc”后,可以正常查询出每一页数据。

观察 逻辑SQL 被改写的结果,以第2页为例:

select * from ( select temp.*, rownum row_id from ( select logid,portal,moduleid,modulename,operid,opername,operip,content,logresult,failreason,createtime from sys_operlog_0 ) temp where rownum <= 20) where row_id > 0

 

初步分析,问题就是出在红色部分,但没找到解决办法,请大神帮助。谢谢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文