oracle存储过程分页处理
知识点链接
1、oracle分页 2、游标使用
创建存储过程
--创建存储过程(startpoint 开始点、getnum 取出来数量)create or replace procedure copylimit(startpoint number,getnum number) as/*定义table*/type emp_tab is table of myemp%rowtype;emp_rd emp_tab;/*定义游标*/emp_cur sys_refcursor;--开启begin --显示用户输入的开始点与要取出的数据量 dbms_output.put_line('开始点:'||startpoint||' 取出数量:'||getnum); --打开游标并且给游标赋值(执行分页查询) open emp_cur for select * from myemp where rowid in ( select rd from( select rownum rm,rd from( select rowid rd from myemp order by empno) where rownum < startpoint + getnum) where rm >= startpoint); --开启循环 loop --从游标里面取值bulk collect方式赋给emp_rd fetch emp_cur bulk collect into emp_rd limit 2; --循环遍历 for i in 1..emp_rd.count loop dbms_output.put_line('员工名:'||emp_rd(i).ename); end loop; exit when emp_cur%notfound; --结速循环 end loop; --关闭游标 close emp_cur;--结束end;
执行存储过程
SQL> exec copylimt(2,4); 开始点:2 取出数量:4员工名:ALLEN员工名:WARD员工名:JONES员工名:MARTIN PL/SQL procedure successfully completed Executed in 0 seconds