1、分頁儲存過程:
首先需要新建乙個包,至於為什麼要這麼做,我沒有深究,如有童鞋知道的話,只會一聲哈
--建立包
create or replace package pck_system is
type t_cursor is ref cursor;
end pck_system;
--建立儲存過程
create or replace procedure paggingprocedure
(p_tablename in varchar2, --表名
p_strwhere in varchar2, --查詢條件
p_ordercolumn in varchar2, --排序的列
p_orderstyle in varchar2, --排序方式
p_curpage in number, --當前頁
p_pagesize in number, --每頁顯示記錄條數
p_fields in varchar2, --要查詢的列
p_totalrecords out number, --總記錄數
p_totalpages out number, --總頁數
v_cur out pck_system.t_cursor) --返回的結果集
isv_sql varchar2(2000) := ''; --sql語句
v_startrecord number(4); --開始顯示的記錄條數
v_endrecord number(4); --結束顯示的記錄條數
begin
--記錄中總記錄條數
v_sql := 'select to_number(count(*)) from ' || p_tablename || ' where ';
if p_strwhere is not null or p_strwhere <> '' then
v_sql := v_sql || p_strwhere;
end if;
execute immediate v_sql into p_totalrecords;
--根據頁大小計算總頁數
if mod(p_totalrecords,p_pagesize) = 0 then
p_totalpages:=trunc(p_totalrecords/p_pagesize,0);
else
p_totalpages:=trunc(p_totalrecords/p_pagesize,0)+1;
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 '|| p_fields ||' from ' || p_tablename;
if p_strwhere is not null or p_strwhere <> '' then
v_sql := v_sql || ' where ' || 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 paggingprocedure;
2、用c#呼叫儲存過程
///
/// 分頁資料
///
/// 表名
/// 查詢返回字段(如果返回所有的則傳入*)
/// 查詢條件
/// 每頁顯示的記錄數
/// 當前頁數
/// 所有記錄數
/// 總頁數
/// 排序字段
/// 排序型別:1表示降序,0表示公升序
///
public static datatable getpagelist(string tablename, string returefields, string strwhere, int pagesize, int curpage, out int rowcount,out int totalpage, string sortfield,int sorttype)
;parameters[0].direction = parameterdirection.input;
parameters[1].direction = parameterdirection.input;
parameters[2].direction = parameterdirection.input;
parameters[3].direction = parameterdirection.input;
parameters[4].direction = parameterdirection.input;
parameters[5].direction = parameterdirection.input;
parameters[6].direction = parameterdirection.input;
parameters[7].direction = parameterdirection.output;
parameters[8].direction = parameterdirection.output;
parameters[9].direction = parameterdirection.output;
parameters[0].value = tablename;
parameters[1].value = strwhere;
parameters[2].value = sortfield;
if (sorttype == 0)
else
parameters[4].value = curpage;
parameters[5].value = pagesize;
parameters[6].value = returefields;
oraclecommand cmd = new oraclecommand("paggingprocedure");//儲存過程名稱
cmd.commandtype = commandtype.storedprocedure;
cmd.parameters.addrange(parameters);
datatable dt = runprocedurecmd(cmd);
rowcount = convert.toint32(cmd.parameters[7].value.tostring());//返回總記錄數
totalpage = convert.toint32(cmd.parameters[8].value.tostring());
return dt;
}///
/// 執行儲存過程 返回datatable
///
///
///
public static datatable runprocedurecmd(oraclecommand cmd)
cmd.connection = conn;
oracledataadapter da = new oracledataadapter(cmd);
da.fill(result);
da.dispose();
conn.close();
conn.dispose();
return result;
}catch (exception ex)
}
Oracle與C 儲存過程分頁
分頁 select from select t1.ename rownum rn from select from emp t1 where rownum 10 where rn 6 開發乙個包 create or replace package tespackage as type test cu...
oracle分頁儲存過程
page slide procedure author robert.c time 2006.11.17 create or replace procedure tablepage select v page size int,the size of a page of list v current...
Oracle分頁儲存過程
第一步要先建立包 create or replace package pkg query is type cur query is ref cursor procedure met down query m tablename in varchar2,表名 m strwhere in varchar...