oracle的幾種分頁

2021-08-29 17:18:27 字數 2380 閱讀 1390

乙個非常好的oracle的分頁sql語句

select * from (select my_table.*, rownum as my_rownum from ( select yhbh, yhmc from yysf_tb_yonghxx order by yhbh) my_table where rownum <20 ) where my_rownum>=10

其它幾種分頁實現:

1.根據rowid來分

select * from t_xiaoxi where rowid in(select rid from (select rownum rn,rid from(select rowid rid,cid from

t_xiaoxi  order by cid desc) where rownum<10000) where rn>9980) order by cid desc;

執行時間0.03秒

2.按分析函式來分

select * from (select t.*,row_number() over(order by cid desc) rk from t_xiaoxi t) where rk<10000 and rk>9980;

執行時間1.01秒

3.按rownum來分

select * from(select t.*,rownum rn from(select * from t_xiaoxi order by cid desc) t where rownum<10000) where

rn>9980;執行時間0.1秒

其中t_xiaoxi為表名稱,cid為表的關鍵字段,取按cid降序排序後的第9981-9999條記錄,t_xiaoxi表有70000多條記錄

個人感覺1的效率最好,3次之,2最差

oracle如何返回指定行數之間的查詢結果

如何返回指定行數之間的查詢結果,以實現web記錄分頁,在oracle中有許多的方法,這裡僅僅列出了4種,希望能對大家有所幫助,大家可以根據不同需要選擇下面的script 

1)select ... where rownum < 50 minus select ... where rownum < 30 

這個方法因為用到了minus操作符,所以速度會受影響。 

2) select results.* from 

( select t2.*, rownum rownumber from 

( select t.* from mv_table t where order by col1) t2) results 

where results.rownumber between 30 and 50 order by col1 

這個方法是從乙個論壇上看到的,沒有親自測試過 

3) 定義cursor x, 2.fetch x a,b,c; loop ...... end loop; 

其中用兩個迴圈變數和乙個flag變數,分別表示,當前的記錄數,屬於第幾頁的, 及第一頁面。 

ps; 

j:=to_number(kafyf); 

i:=1; 

open cx; 

loop fetch cx into col1,col2,col3,col4,col5,col6; 

if cx%notfound then exit; end if; 

if i>=j then 

htp.tablerowopen; 

htp.tabledata(col1); 

htp.tabledata(col2); 

htp.tabledata(col4); 

htp.tabledata(col5); 

htp.tabledata(col6); 

htp.tabledata(col3); 

htp.tablerowclose; 

i:=i+1; 

if i=j+10 then l:=1; exit; end if; 

else i:=i+1; 

end if; 

end loop; 

close x; 

該方法是名叫『淼』的網友寫的script,他用到了oracle web2kit中的owa_util package。 

4)how can one page forward and backwards through a table? 

externalize rownum by implementing queries like this: 

select ... 

from (select rownum rnum, ... from ...) 

where rnum between :low and :high and rownum <(:high :low + 1); 

oracle 幾種 分頁語句

1.根據rowid來分 select from t xiaoxi where rowid in select rid from select rownum rn,rid from select rowid rid,cid from t xiaoxi order by cid desc where r...

詳解Oracle的幾種分頁查詢語句

分頁查詢格式 select from select a.rownum rn from select from table name a where rownum 40 where rn 21 其中最內層的查詢select from table name表示不進行翻頁的原始查詢語句。rownum 40...

詳解Oracle的幾種分頁查詢語句

2009 04 09 13 14 佚名 51cto 字型大小 t t 本文將介紹oracle的分頁查詢語句,看過本文後,大家基本上可以按照本文給出的格式來進行套用。不同的格式具備不同的執行效率。分頁查詢格式 select from select a.rownum rn from select fro...