ORACLE 自定義分頁儲存過程

2021-09-06 12:12:22 字數 3946 閱讀 9234

一、建立包

create

orreplace

package pkg_jk_lab_basic

istype cursor_type

is ref cursor

;

procedure

sp_get_pagination (

pi_tablename

invarchar2, --

表名 pi_where in

varchar2, --

查詢條件

pi_columns in

varchar2, --

查詢列集合

pi_ordercolumn in

varchar2, --

排序的列

pio_curpage in out number, --

當前頁 pio_pagesize in out number, --

每頁顯示記錄條數

po_totalrecords out number, --

總記錄數

po_totalpages out number, --

總頁數po_cur out cursor_type);

end pkg_jk_lab_basic;

二、建立包體

create

orreplace

package body pkg_jk_lab_basic

isprocedure

sp_get_pagination

(pi_tablename

invarchar2, --

表名 pi_where in

varchar2, --

查詢條件

pi_columns in

varchar2, --

查詢列集合

pi_ordercolumn in

varchar2, --

排序的列

pio_curpage in out number, --

當前頁 pio_pagesize in out number, --

每頁顯示記錄條數

po_totalrecords out number, --

總記錄數

po_totalpages out number, --

總頁數 po_cur out cursor_type) --

返回的結果集

isv_sql

varchar2(1000) :=

''; --

sql語句

v_startrecord number(4); --

開始顯示的記錄條數

v_endrecord number(4); --

結束顯示的記錄條數

v_where varchar2(500) :=

'';

v_ordercolumn

varchar2(200) :=

'';

v_columns

varchar2(200) :=

'';

begin

--記錄中總記錄條數

v_sql :=

'select to_number(count(*)) from '||

pi_tablename;

v_where :

= trim(nvl(pi_where,''

));

if length(v_where)>

0then

v_where :='

where

'|| pi_where ||''

; v_sql :

= v_sql ||

v_where;

endif

;

v_ordercolumn :

= trim(nvl(pi_ordercolumn,''

));

if length(v_ordercolumn)>

0then

v_ordercolumn :='

order by

'|| v_ordercolumn ||''

;

endif

;

execute immediate v_sql into

po_totalrecords;

if pio_pagesize <=

0then

pio_pagesize :=10

;

endif

;

--根據頁大小計算總頁數

po_totalpages := ceil( po_totalrecords /

pio_pagesize);

if pio_curpage <

1then

pio_curpage :=1

;

endif

;

if pio_curpage > po_totalpages then

pio_curpage :

=po_totalpages;

endif

;

--實現分頁查詢

v_startrecord := (pio_curpage -

1) * pio_pagesize +1;

v_endrecord :

= pio_curpage *

pio_pagesize;

v_columns :

= trim(nvl(pi_columns,''

));

if length(v_columns)>

0and v_columns <>'*

'then

v_sql :='

select * from (select

'|| v_columns ||

', rownum rownumber from '||

'(select

'|| v_columns ||

'from

'|| pi_tablename || v_where || v_ordercolumn ||'))

'||'where rownumber <=

'|| v_endrecord ||

'and rownumber >= '||

v_startrecord ;

else

v_sql :='

select * from (select a.*, rownum rownumber from '||

'(select * from

'|| pi_tablename || v_where || v_ordercolumn ||

') a )'||

'where rownumber <=

'|| v_endrecord ||

'and rownumber >= '||

v_startrecord ;

endif

;

dbms_output.put_line(v_sql);

open po_cur for

v_sql;

endsp_get_pagination;

end pkg_jk_lab_basic;

oracle儲存過程和自定義函式

學習中遇到的相關問題plsql是什麼?資料庫的物件 表 檢視 索引 序列 同義詞 儲存過程 儲存函式。儲存過程和儲存函式 指儲存在資料庫中供所有使用者程式呼叫的子程式叫儲存過程 儲存函式。相同點 完成特定功能的程式。區別 是否用return語句返回值。儲存函式可以通過return返回值,而儲存過程不...

Oracle 儲存過程中自定義異常

參考 oracle 使用者自定義異常小例子 oracle中raise異常深入分析 customize exp exception 自定義異常 begin for c in select d.from scott.dept d loop begin dbms output.put line dept ...

自定義分頁

分頁 public string madebuttonlink int pagecount,int curpage,string szurl pagecount得到頁數 curpage當前頁 szurl連線位址 public int getpagecount string sztable,int l...