Oracle中的資料分頁

2022-07-27 08:27:09 字數 2923 閱讀 3456

--資料分頁指令碼

--建立包含資料分頁**元素宣告的包頭結構

create or replace package data_control

istype type_cursor_data is ref cursor;

v_totalline int; --總資料行數

v_totalpage int; --總頁數

v_selectsql varchar2(500); --快取查詢語句

--function pagedata(tablename varchar2,currentpage int,linecount int) return type_cursor_data; --函式方式實現分頁查詢

procedure pagedata(tablename varchar2,currentpage int,linecount int,resultdata out type_cursor_data); --過程方式實現分頁查詢

end data_control;

--建立針對資料分頁**元素實現的包體結構

create or replace package body data_control

is/*function pagedata(tablename varchar2,currentpage int,linecount int) return type_cursor_data

isdata type_cursor_data; --快取當前頁資料的游標變數

begin

execute immediate 'select count(*) from ' || tablename into v_totalline;

dbms_output.put_line('總記錄行數: ' || v_totalline);

if v_totalline / linecount = 0 then

v_totalpage := v_totalline / linecount;

else

v_totalpage := v_totalline / linecount + 1;

end if;

dbms_output.put_line('總頁數: ' || v_totalpage);

v_selectsql := 'select * from (select tn.*,rownum linenum from ' || tablename || ' tn) t where t.linenum > ' || (currentpage * linecount - linecount) || ' and t.linenum <= ' || (currentpage * linecount);

open data for v_selectsql;

return data;

end pagedata;*/

procedure pagedata(tablename varchar2,currentpage int,linecount int,resultdata out type_cursor_data)

isdata type_cursor_data; --快取當前頁資料的游標變數

begin

execute immediate 'select count(*) from ' || tablename into v_totalline;

dbms_output.put_line('總記錄行數: ' || v_totalline);

if v_totalline / linecount = 0 then

v_totalpage := v_totalline / linecount;

else

v_totalpage := v_totalline / linecount + 1;

end if;

dbms_output.put_line('總頁數: ' || v_totalpage);

v_selectsql := 'select * from (select tn.*,rownum linenum from ' || tablename || ' tn) t where t.linenum > ' || (currentpage * linecount - linecount) || ' and t.linenum <= ' || (currentpage * linecount);

open data for v_selectsql;

resultdata := data;

end pagedata;

end data_control;

--測試**

declare

res_data data_control.type_cursor_data;

type type_page_record is record(

empno emp.empno%type,

ename emp.ename%type,

job emp.job%type,

mgr emp.mgr%type,

hiredate emp.hiredate%type,

sal emp.sal%type,

comm emp.comm%type,

deptno emp.deptno%type,

rn int

);rec_row type_page_record;

begin

--res_data := data_control.pagedata('emp',2,5);

data_control.pagedata('dept',2,5,res_data);

loop

fetch res_data into rec_row;

exit when res_data%notfound;

dbms_output.put_line(rec_row.ename);

end loop;

close res_data;

end;

Oracle中的SQL分頁分頁

作者出處 本文分析並介紹oracle中的分頁查詢的方法。oracle中的表,除了我們建表時設計的各個字段,其實還有兩個字段 此處只介紹2個 分別是rowid 行標示符 和rownum 行號 即使我們使用describe命令檢視表的結構,也是看不到這兩個列的描述的,因為,他們其實是只在資料庫內部使用的...

Oracle中的分頁

如何在oracle裡實現類似sql server裡top語法的分頁查詢,例如查詢結果集的前10條,查詢結果集的第10到第20條?答案是使用子查詢,並使用oracle的函式rownum,舉例如下 有乙個使用者表如下 user userid number 10 not null,status numbe...

oracle中的分頁

方法一 適合小資料量 select from select rownum as 別名 rn,別名d.from 表名1 as 別名 d where rownum 20 where別名 rn 11 方法二速度較穩定,推薦使用 select from select row number over orde...