Oracle 简易的分页存储过程

写个简单的存储过程权当练习

 

create or replace package  MAHANPACK as

type my_cursor is  ref cursor;
end MAHANPACK;
-------------------------------------

create or replace package body PAGEUTIL is
procedure   getResults(
tableName  in varchar2,
colsStr in varchar2,
pageSize  in number,
currentPage in number,
pageCount out number,
p_cursor out MAHANPACK.my_cursor
is
v_sql  varchar2(2000);
v_begin number:= (currentPage-1)*pageSize+1;
v_end number := currentPage*pageSize;
begin v_sql:='select * from (
select t.*,rownum rn from 
(select  '||colsStr ||' from '
||tableName||' ) t 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 pageCount;
if mod(pageCount,pageSize)=0 then 
pageCount:= pageCount/pageSize ;
else
pageCount:= pageCount/pageSize+1;
end if;
end;
end PAGEUTIL;

 

SQL> ed

已写入 file afiedt.buf

 

  1  begin

  2  PAGEUTIL.getResults(tableName=>'emp',

  3   colsStr=>'empno , ename ',

  4   pageSize=>20,

  5   currentPage=>1,

  6   pageCount=>:count,

  7   p_cursor=>:c1);

  8* end;

SQL> /

 

PL/SQL 过程已成功完成。

 

SQL> print count;

 

     COUNT

----------

       1.7

 

SQL> print c1;

 

     EMPNO ENAME              RN

---------- ---------- ----------

      7369 SMITH               1

      7499 ALLEN               2

      7521 WARD                3

      7566 JONES               4

      7654 MARTIN              5

      7698 BLAKE               6

      7782 CLARK               7

      7788 SCOTT               8

      7839 KING                9

      7844 TURNER             10

      7876 ADAMS              11

 

     EMPNO ENAME              RN

---------- ---------- ----------

      7900 JAMES              12

      7902 FORD               13

      7934 MILLER             14

 

已选择14行。

 

 

 

 

测试

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值