一、建立包
createorreplace
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;
二、建立包體
createorreplace
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...