--資料分頁指令碼
--建立包含資料分頁**元素宣告的包頭結構
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...