Oracle分頁儲存過程及呼叫示例《轉》

2021-09-11 20:53:48 字數 3911 閱讀 4305

轉至: (略微做了些小調整,以便初學)

1.首先在oracle中建包體,用於游標返回當前資料記錄集

create or replace package pkg_query as type cur_query is ref cursor;

end pkg_query;

2.在oracle中建儲存過程,儲存過程名庫 procedure prc_query

create or replace procedure prc_query

(p_tablename        in  varchar2,   --表名

p_strwhere         in  varchar2,   --查詢條件

p_ordercolumn      in  varchar2,   --排序的列

p_orderstyle       in  varchar2,   --排序方式

p_curpage          in out number,  --當前頁

p_pagesize         in out number,  --每頁顯示記錄條數

p_totalrecords     out number,     --總記錄數

p_totalpages       out number,     --總頁數

v_cur              out pkg_query.cur_query)   --返回的結果集

isv_sql varchar2(1000) := '';      --sql語句

v_startrecord number(4);         --開始顯示的記錄條數

v_endrecord number(4);           --結束顯示的記錄條數

begin

--記錄中總記錄條數

v_sql := 'select to_number(count(*)) from ' || p_tablename || ' where 1=1';

if p_strwhere is not null or p_strwhere <> '' then

v_sql := v_sql ||  ' and ' || p_strwhere;

end if;

execute immediate v_sql into p_totalrecords;

--驗證頁面記錄大小

if p_pagesize < 0 then

p_pagesize := 0;

end if;

--根據頁大小計算總頁數

if mod(p_totalrecords,p_pagesize) = 0 then

p_totalpages := p_totalrecords / p_pagesize;

else

p_totalpages := p_totalrecords / p_pagesize + 1;

end if;

--驗證頁號

if p_curpage < 1 then

p_curpage := 1;

end if;

if p_curpage > p_totalpages then

p_curpage := p_totalpages;

end if;

--實現分頁查詢

v_startrecord := (p_curpage - 1) * p_pagesize + 1;

v_endrecord := p_curpage * p_pagesize;

v_sql := 'select * from (select a.*, rownum r from ' ||

'(select * from ' || p_tablename;

if p_strwhere is not null or p_strwhere <> '' then

v_sql := v_sql || ' where 1=1  and ' || p_strwhere;

end if;

if p_ordercolumn is not null or p_ordercolumn <> '' then

v_sql := v_sql || ' order by ' || p_ordercolumn || ' ' || p_orderstyle;

end if;

v_sql := v_sql || ') a where rownum <= ' || v_endrecord || ') b where r >= '

|| v_startrecord;

dbms_output.put_line(v_sql);

open v_cur for v_sql;

end prc_query;

3.在資料層中呼叫儲存過程,返回乙個datatable及二個引數,datatable儲存資料,curpage為當前頁碼(儲存過程會根據傳入的數值查詢資料,返回datatable。),pagecount為總頁數, recordcount為資料總條數

public class paging

4、.net呼叫orcalehelper來實現分頁:

(orcalehelper類: )

oracleparameter paramters = new oracleparameter

;string tname = "suppliers", strsql = " supplier_id<10 ", sortrow = " supplier_id ", sortmethod = " desc ";

int curpage = 2, pagesize = 3;

paramters[0].value = tname;//p_tablename        in  varchar2,   --表名

paramters[1].value = strsql;//p_strwhere         in  varchar2,   --查詢條件

paramters[2].value = sortrow;//p_ordercolumn

paramters[3].value = sortmethod;//p_ordercolumn      in  varchar2,   --排序的列

paramters[4].value = curpage;p_curpage          in out number,  --當前頁

paramters[5].value = pagesize;//p_pagesize         in out number,  --每頁顯示記錄條數

paramters[6].direction = parameterdirection.inputoutput;//p_totalrecords     out number,     --總記錄數

paramters[6].value = 0;

paramters[7].direction = parameterdirection.inputoutput;//p_totalpages       out number,     --總頁數

paramters[7].value = 0;

paramters[8].direction = parameterdirection.output;//v_cur              out pkg_query.cur_query)   --返回的結果集

dataset ds = orcaletest.oraclehelper.runproceduregetdataset("prc_query", paramters);

datagridview1.datasource = ds.tables[0];

string pagecount = paramters[7].value.tostring().trim(), recordcount = paramters[6].value.tostring();

txt_result.text += "總記錄數:" + recordcount + ",頁數:" + pagecount;

Oracle分頁儲存過程以及C 呼叫

1 分頁儲存過程 首先需要新建乙個包,至於為什麼要這麼做,我沒有深究,如有童鞋知道的話,只會一聲哈 建立包 create or replace package pck system is type t cursor is ref cursor end pck system 建立儲存過程 create...

分頁儲存過程呼叫

獲得資料集 表名 需要返回的列,預設為全部 排序欄位名 頁尺寸 頁碼 返回記錄總數,非 0 值則返回 設定排序型別,非 asc 值則降序 查詢條件 注意 不要加 where 資料集 public static sqldatareader get datareader string tblname,s...

JAVA 呼叫Oracle 及儲存過程

try r.close s.close ct.close catch exception e try proc.execute ct.close catch exception e try proc.setstring 1,gq proc.setint 2,24 proc.execute ct.cl...