轉至: (略微做了些小調整,以便初學)
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...