Oracle內使用游標實現分頁

2021-07-10 19:19:47 字數 3123 閱讀 5176

oracle內分頁:

1.首先建立返回結果集的包,**如下:

--建立包

create

orreplace package types as

type cursortype is ref cursor;

end;

2.建立實現分頁查詢的儲存過程:

--建立儲存過程

create or replace procedure proc_get_data_paging(p_tablename in varchar2, --表(檢視)名

p_strwhere in varchar2, --查詢條件

p_ordercolumn in varchar2, --排序的列

p_curpage in

out number, --當前頁

p_pagesize in

out number, --每頁顯示記錄條數

p_totalrecords out number, --總記錄數

p_totalpages out number, --總頁數

v_cur out types.cursortype) --返回的結果集

is v_sql varchar2(4000) := ''; --sql語句

v_startrecord number(10); --開始顯示的記錄條數

v_endrecord number(10); --結束顯示的記錄條數

v_showall integer; --是否顯示全部記錄

begin

--記錄中總記錄條數

v_sql := 'select to_number(count(*)) from ' || p_tablename ||

' where 1=1 ';

if p_strwhere is

notnull

or p_strwhere <> '' then

v_sql := v_sql || p_strwhere;

endif; execute immediate v_sql

into p_totalrecords;

--驗證頁面記錄大小

if p_pagesize <= 0

then

v_showall := 1;

p_pagesize := 0;

endif; if v_showall is

null

then

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

ifmod(p_totalrecords, p_pagesize) = 0

then

p_totalpages := trunc(p_totalrecords / p_pagesize, 0);

else

p_totalpages := trunc(p_totalrecords / p_pagesize, 0) + 1;

endif; else

p_totalpages := 1;

endif; --驗證頁號

if p_curpage < 1

then

p_curpage := 1;

endif; if p_curpage > p_totalpages then

p_curpage := p_totalpages;

endif; --實現分頁查詢

v_startrecord := (p_curpage - 1) * p_pagesize + 1;

v_endrecord := p_curpage * p_pagesize;

v_sql := 'select * from (select a.*, rownum r from ' ||

'(select * from ' || p_tablename;

if p_strwhere is

notnull

or p_strwhere <> '' then

v_sql := v_sql || ' where 1=1 ' || p_strwhere;

endif; if p_ordercolumn is

notnull

or p_ordercolumn <> '' then

v_sql := v_sql || ' order by ' || p_ordercolumn;

endif; if v_showall is

null

then

v_sql := v_sql || ') a where rownum <= ' || v_endrecord ||

') b where r >= ' || v_startrecord;

else

v_sql := v_sql || ') a ) b ';

endif; dbms_output.put_line(v_sql);

open v_cur for v_sql;

end proc_get_data_paging;

一定要先建立返回結果集的包,否則編譯儲存過程有問題。

3.測試儲存過程:

在測試的值內填入相應資料,執行後檢視v_cur的值即可

執行後檢視v_cur的值:

–建立函式(也可以使用函式)

create or replace function funtest return types.cursortype as

l_cursor types.cursortype;

begin

open l_cursor for select * from tablename;

return l_cursor;

end;

;

Oracle使用游標

了解一下訪問資料庫的ddl和tcl語句 一。plsql中使用select語句,應該與into字句連用,查詢出的返回值賦予into子句中的變數 變數的宣告是在delcare中 二。type屬性 在plsql中可以將變數和常量宣告為內建或使用者定義的資料型別,以引用乙個列名,同時繼承他的資料型別和大小。...

Oracle中使用游標

游標 目的 為了處理select語句返回多行資料 使用步驟 1 定義游標 cursor cursor name is select statement 2 開啟游標 open cursor name 3 提取資料 fetch cursor name into variable1,提取一行資料 或fe...

Oracle使用游標更新資料

使用游標修改資料 定義乙個游標,游標名稱為 mycursor 更新scott使用者中emp表中empno為7369的銷售額 created on 2015 11 30 by zhanw declare he emp rowtype cursor mycursor pid integer is sel...