oracle分页存储过程

------------------------创建分页的存储过程--------------------

--创建包,声明游标
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;
------------------------创建分页的存储过程--------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值