----------------------------------------------------------------------------------
-------------------------------(通用)分页的存储过程----------------------
----------------------------------------------------------------------------------
--创建包
create or replace package page_package
as
type p_cursor is ref cursor;
end page_package;
--创建存储过程
create or replace procedure fenye_proc
(
--定义要查询的表
tableName in varchar2,
--当前页数
currentPage in number,
--每页显示的记录数
pagesize in number,
--总记录数
totalCount out number,
--总页数
totalPage out number,
--返回的结果集
page_cursor out page_package.p_cursor
)as -- 声明变量部分
--存放 SQL 语句
v_sql varchar2(200);
--页码开始
v_begin number := (currentPage - 1)*pagesize + 1;
--页码结束
v_end number := pagesize*currentPage;
begin -- 语句执行块部分
--分页的 SQL 语句
v_sql := 'select * from (select a.*,rownum rn from (select * from '||tableName||') a where rownum <= '||v_end||') where rn >='||v_begin;
--打开游标,并让游标执行结果集
open page_cursor for v_sql;
--求总记录数
v_sql := 'select count(*) from '||tableName;
execute immediate v_sql into totalCount;
-- 求总页数
if mod(totalCount,pagesize)=0 then
totalPage := totalCount/pagesize;
else
totalPage := totalCount/pagesize + 1;
end if;
end;