oracle 儲存過程實現分頁

2021-09-08 13:30:38 字數 2908 閱讀 5186

1

create

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