Oracle ——存储过程——分页

时间:2014-05-02 22:02:04   收藏:0   阅读:411

输入:表名、每页显示的记录数、当前页
输出:总记录数、总页数、结果集

--首先,创建一个包,定义游标类型
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;

Oracle ——存储过程——分页,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!