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