1create
or replace package pkg_query is23
45-- author : administrator
6-- created : 2016/12/8 星期四 10:28:37
7-- purpose : 用做查詢游標89
10-- public type declarations
11 type cur_query is ref cursor;
1213
14end pkg_query;
1516
1718
19create
or replace procedure prc_query
20 (p_tablename in
varchar2, --表名
21 p_strwhere in
varchar2, --查詢條件
22 p_child_query in
varchar2, --子查詢
23 p_ordercolumn in
varchar2, --排序的列
24 p_orderstyle in
varchar2, --排序方式
25 p_curpage in out number, --當前頁
26 p_pagesize in out number, --每頁顯示記錄條數
27 p_totalrecords out number, --總記錄數
28 p_totalpages out number, --總頁數
29 v_cur out pkg_query.cur_query) --返回的結果集
30is
31 v_sql varchar2(4000) := ''; --sql語句
32 v_startrecord number(7); --開始顯示的記錄條數
33 v_endrecord number(7); --結束顯示的記錄條數
34begin
35--記錄中總記錄條數
36 v_sql := 'select to_number(count(*)) from ' || p_tablename || 'where 1=1';
37if p_strwhere is
notnull
then
38 v_sql := v_sql || p_strwhere;
39end
if;40 dbms_output.put_line(v_sql);
41execute
immediate v_sql into p_totalrecords;
42 p_totalpages := 0;
43-- if p_totalrecords <> 0 then
4445
46--驗證頁面記錄大小
47if p_pagesize < 0 then
48 p_pagesize := 0;
49end
if;50
5152
--根據頁大小計算總頁數
53if mod(p_totalrecords,p_pagesize) = 0 then
54 p_totalpages := floor(p_totalrecords / p_pagesize);
55else
56 p_totalpages := floor(p_totalrecords / p_pagesize) + 1;
57end
if;58
5960
6162
6364
--實現分頁查詢
65 v_startrecord := (p_curpage - 1) * p_pagesize + 1;
66 v_endrecord := p_curpage * p_pagesize;
67 v_sql := 'select b.*,' || p_child_query || 'from (select a.*, rownum r from ' ||
68 '(select * from ' || p_tablename;
69if p_strwhere is
notnull
then
70 v_sql := v_sql || 'where 1=1 ' || p_strwhere;
71end
if;72
if p_ordercolumn is
notnull
then
73 v_sql := v_sql || 'order by ' || p_ordercolumn || '' || p_orderstyle;
74end
if;75 v_sql := v_sql || ') a where rownum <= ' || v_endrecord || ') b where r >= '
76 || v_startrecord;
77 dbms_output.put_line(v_sql);
78open v_cur for v_sql;
79-- end if;
8081
82end prc_query;
oracle儲存過程實現分頁
建立儲存過程 建立存放游標的包 create or replace package page package is 申明游標 type page cursor is ref cursor end page package 建立查詢所有使用者的過程 create or replace procedur...
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...