select * from(select t.*,row_number() over(order by t.id desc) rn from table t )where rn>0 and rn<=20

解决方案 »

  1.   

    我建议用rowid来实现分页。给你个小例子:
    select /*+FIRST_ROWS*/ * from t 
    where rowid in 
    ( select rid from 
    ( select rownum rno,rowid rid from 
    ( select rowid from t 
    where category = 20 
    order by category,product_name 
    ) where rownum <= 5000 
    ) where rno >= 4981 
    )   
      

  2.   

    nowait(独行天涯路) 的方法的确好。只是他写的语句有个小问题,要改为
    select /*+FIRST_ROWS*/ * from t 
    where rowid in 
    ( select rid from 
    ( select rownum rno,rid from 
    ( select rowid rid from t 
    where category = 20 
    order by category,product_name 
    ) where rownum <= 5000 
    ) where rno >= 4981 
    )
      

  3.   

    根据rowid来查询可以让速度提升很多,如果是要根据其它的字段的话,还是采用分页的存储过程比较好。SQLSERVER下有很多,我刚接触ORACLE,不知道这里面有没有。