------------------------创建分页的存储过程--------------------
--创建包,声明游标
create or replace package sp_mypackage is
type record_cursor is ref cursor;
end sp_mypackage;
---创建分页存储过程
create or replace procedure sp_counPpage
(pageNow in number,--显示第几页
pageSizes in number,--每页显示的记录数
record_out2 out sp_mypackage.record_cursor,
myrows out integer,--总记录数
myPageCount out integer--总页数
) is
--声明sql语句变量
v_sql varchar2(1024);
--声明开始的记录数
v_begin number:=(pageNow-1)*pageSizes-1;
---声明结束的记录数
v_end number:=pageNow*pageSizes;
begin
v_sql:='select * from (select t1.*, rownum as rn from (select * from emp) t1 where rownum<='
||v_end||') where rn >='
||v_begin;
open record_out2 for v_sql;
v_sql:='select count(*) from emp';
--执行查询总记录数
execute immediate v_sql into myrows;
---计算总页数
if mod(myrows,pageSizes)=0 then
myPageCount:= myrows/pageSizes;
else
myPageCount:= trunc(myrows/pageSizes)+1;
end if;
--关闭游标
--close record_out2;
end;
--创建调用
declare
type instructor_info 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 number
);
pageNow number:=5;--显示第几页
pageSizes number:=3;--每页显示的记录数
record_out2 sp_mypackage.record_cursor;
myrows integer;--总记录数
myPageCount integer;--总页数
v_name varchar2(1024);
vr_zip instructor_info;
begin
sp_counPpage(pageNow,pageSizes,record_out2,myrows,myPageCount);
loop
fetch record_out2 into vr_zip;
exit when record_out2%notfound;
dbms_output.put_line('name is: ' ||vr_zip.ENAME ||' sal is: '||vr_zip.SAL||' num:'||vr_zip.rn);
end loop;
--关闭游标
close record_out2;
dbms_output.put_line('每页显示的记录数: '||pageSizes);
dbms_output.put_line('显示的页数: '||pageSizes );
dbms_output.put_line('记录数: '||myrows);
dbms_output.put_line('总页数: '||myPageCount);
end;
------------------------创建分页的存储过程--------------------