关于oracle分页顺序问题,我的代码可以实现分页,但是新添加进去的,顺序不是在最后

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于oracle分页顺序问题,我的代码可以实现分页,但是新添加进去的,顺序不是在最后相关的知识,希望对你有一定的参考价值。

--分页存储过程
create or replace procedure usp_MessageByPage
(
pageIndexnumber,--页码
pageSizenumber,--每页显示的记录数
pageCount outnumber, --总页数
ubByPage out Message_pack1.Message_cs1
)
as
v_sql varchar2(1000);--存储sql语句
begin
--计算总的记录数
select count(id) into pageCount from TBL_Message;
--计算总页数
pageCount:=ceil(PageCount*1.0/PageSize);
--分页sql语句
v_sql:='select id,message,author,posttime from
(select rownum rw,t.* from
(select id,message,author,posttime from TBL_Message)t
where rownum<='||pageSize*pageIndex||') where rw>'||pageSize*(pageIndex-1);
--输出第pageIndex页的内容
open ubByPage for v_sql;
end usp_MessageByPage;

最内层的那个查询:select id,message,author,posttime from TBL_Message
后面需要加上一个order by语句排序,这样得到的结果顺序是固定的
参考技术A 要求在代码实现分页里面。orderby里面顺序一致

Oracle分页查询排序数据重复问题

在项目开发过程中大量的使用了分页查询,当想要让数据按照日期排序时,出现了很多重复的数据出现。

造成这一问题出现的原因是:在数据中,日期的值不是唯一的。

我们知道

Oracle的分页查询是没有进行任何排序操作的,Oracle是顺序的从数据块中读取符合条件的数据返回到客户端。

而Oracle的排序算法不具有稳定性,也就是说,对于键值相等的数据,这种算法完成排序后,不保证这些键值相等的数据保持排序前的顺序。

解决这一问题的方法就是在后边增加一个唯一性列,比如主键,问题解决。

 

select * from
(
  select a.*, rownum rn from
    ( select * from user u order by u.createdate desc, u.id desc ) a
where rownum <=20
) b
where b.rn >=0

以上是关于关于oracle分页顺序问题,我的代码可以实现分页,但是新添加进去的,顺序不是在最后的主要内容,如果未能解决你的问题,请参考以下文章

orcale rownum 分页查询的数据顺路混乱

Oracle分页查询排序数据重复问题

[Oracle]关于Oracle分页写法的性能分析及ROWNUM说明

关于报表打印

java&sql的分页怎么做?

Oracle之分页