输入:表名、每页显示的记录数、当前页
输出:总记录数、总页数、结果集
--首先,创建一个包,定义游标类型
CREATE
OR REPLACE PACKAGE fenye_package IS
TYPE fenye_cursor IS REF CURSOR;
END
fenye_package;
--输入:表名、每页显示的记录数、当前页
--输出:总记录数、总页数、结果集
CREATE OR REPLACE PROCEDURE
sp_fenye
(tableName IN
VARCHAR2,--表名称
maxresult IN NUMBER,
--每页记录数
currentpage IN NUMBER, --当前页
totalrecord OUT
NUMBER, --总记录数
totalpage OUT NUMBER,
--总页数
p_cursor OUT fenye_package.fenye_cursor --
输出结果集
) IS
--变量定义部分
v_sql varchar2(1000);
--sql分页语句
v_begin
number:=(currentpage-1)*maxresult;--开始行号
v_end
number:=currentpage*maxresult; --结束行号
BEGIN
v_sql:= ‘SELECT * FROM (SELECT ROWNUM RN, T1.* FROM
(SELECT * FROM
‘||tableName||‘) T1 WHERE ROWNUM <=‘||v_end||‘)
WHERE RN
>‘||v_begin;
open p_cursor for v_sql;--把分页语句与游标关联
--计算总记录数
v_sql:= ‘select count(*) from
‘||tableName;
execute immediate v_sql into
totalrecord;--执行sql并把返回的结果值赋值给totalrecord
--计算总页数
if
mod(totalrecord,maxresult)=0 then
totalpage:=totalrecord/maxresult;
else
totalpage:=totalrecord/maxresult+1;
--totalpage:=trunc(totalrecord/maxresult,0)+1;
end if;
END sp_fenye;