調(diào)用Oracle 分頁存儲(chǔ)過程更為快捷的方案
我們都知道用ASP.NET來調(diào)用Oracle分頁存儲(chǔ)過程要結(jié)合ASPnetpager分頁控件,來實(shí)現(xiàn)分頁的自動(dòng)功能,在2010-01-31 21:01之前我們用的都是GridView自帶的分頁功能,那速度啊慢的真實(shí)不行 ,決定自定義分頁 Oracle庫里有5W多條數(shù)據(jù),AspnetPager做的還是不錯(cuò),拿過來用。
Oracle 分頁存儲(chǔ)過程:
create or replace package JT_P_page is
type type_cur is ref cursor; 定義游標(biāo)變量用于返回記錄集
procedure Pagination (Pindex in number, 要顯示的頁數(shù)索引,從0開始
Psql in varchar2, 產(chǎn)生分頁數(shù)據(jù)的查詢語句
Psize in number, 每頁顯示記錄數(shù)
Pcount out number, 返回的分頁數(shù)
Prowcount out number, 返回的記錄數(shù)
v_cur out type_cur 返回分頁數(shù)據(jù)的游標(biāo)
);
end JT_P_page;
定義包主體
create or replace package body JT_P_page is
procedure Pagination(Pindex in number, 要顯示的頁數(shù)索引,從0開始
Psql in varchar2, 產(chǎn)生分頁數(shù)據(jù)的查詢語句
Psize in number, 每頁顯示記錄數(shù)
Pcount out number, 返回的分頁數(shù)
Prowcount out number, 返回的記錄數(shù)
v_cur out type_cur 返回分頁數(shù)據(jù)的游標(biāo)
- ) AS
- v_sql VARCHAR2(1000);
- v_Pbegin number;
- v_Pend number;
- begin
- v_sql := 'select count(*) from (' || Psql || ')';
- execute immediate v_sql into Prowcount;
計(jì)算記錄總數(shù)
- Pcount := ceil(Prowcount / Psize);
計(jì)算分頁總數(shù),顯示任意頁內(nèi)容
- v_Pend := Pindex * Psize + Psize;
- v_Pbegin := v_Pend - Psize + 1;
- v_sql := 'select * from (' || Psql || ') where rn between ' || v_Pbegin || ' and ' || v_Pend;
- open v_cur for v_sql;
- end Pagination;
- end JT_P_page;
這個(gè)是在網(wǎng)上找的,還不錯(cuò) 主要是根據(jù)偽列 rownum作為where查詢條件 進(jìn)行帥選,,通過這次做這個(gè)Oracle分頁算是對rownum有了初步的認(rèn)識(shí),實(shí)踐出真理 , 有了Oracle分頁存儲(chǔ)過程截下來就是調(diào)用。
【編輯推薦】
- Oracle存儲(chǔ)過程的編寫經(jīng)驗(yàn)總結(jié)
- Oracle11g認(rèn)證考試的3個(gè)主要途徑
- Oracle數(shù)據(jù)庫中3種常用的關(guān)閉方式
- Oracle數(shù)據(jù)庫中經(jīng)常使用的啟動(dòng)方式介紹
- 用觸發(fā)器實(shí)現(xiàn)Oracle操作日志