oracle高效分頁儲存過程(百萬資料級)

2022-02-21 15:40:32 字數 1668 閱讀 9134

create or replace procedure pager(

page in

number,--

資料頁數,從1開始

pagesize in

number,--

每頁大小

tablename nvarchar2,--

表名strwhere nvarchar2,--

where條件

orderby nvarchar2,

numcount out

number,--

總記錄數

v_cur out pkg_query.cur_query) is

strsql

varchar2(2000);--

獲取資料的sql語句

pagecount number;--

該條件下記錄頁數

startindex number;--

開始記錄

endindex number;--

結束記錄

----

--分頁獲取資料

begin

strsql:='

select count(1) from '||

tablename;

if strwhere is

notnull

or strwhere<>

''then

strsql:

=strsql||

'where '||

strwhere;

endif;

execute immediate strsql into

numcount;

--計算資料記錄開始和結束

pagecount:=numcount/pagesize+1;

startindex:

=(page-

1)*pagesize+1;

endindex:

=page*

pagesize;

strsql:='

select rownum ro, t.* from

'||tablename||'t

';

strsql:

=strsql||

'where rownum<='||

endindex;

if strwhere is

notnull

or strwhere<>

''then

strsql:

=strsql||

'and '||

strwhere;

endif;

if orderby is

notnull

or orderby<>

''then

strsql:

=strsql||

'order by '||

orderby;

endif;

strsql:='

select * from (

'||strsql||

') where ro >='||

startindex;

dbms_output.put_line(strsql);

open v_cur for

strsql;

end pager;

高效分頁儲存過程

高效分頁儲存過程 儲存過程與頁面呼叫如下 create procedure search sp tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸...

高效分頁儲存過程

儲存過程與頁面呼叫如下 create procedure search sp tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pageinde...

高效分頁儲存過程

儲存過程與頁面呼叫如下 create procedure search sp tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pageinde...