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

2022-03-13 15:40:59 字數 4197 閱讀 9663

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...