select *
from (select t.*, rownum rn
from (select * from person order by person_Id) t
where rownum < 5000000)
where rn > 4999990
;
select *
from (select t.*, rownum rn
from (select * from person order by person_Id) t
where rownum < 5000010)
where rn > 5000000
上述查询结果有时是完全一样的。
这个主要是因为order的字段不唯一,相同排序时rownum算法的问题。
这个rownum算法其实并不固定,有时asc后面不变,有时desc后面不变。
解决方法,加上唯一值:
order by xx,rowid
or
order by pk