码迷,mamicode.com
首页 > 数据库 > 详细

Oracle ——存储过程——分页

时间:2014-05-02 22:02:04      阅读:411      评论:0      收藏:0      [点我收藏+]

标签:style   color   int   rgb   type   name   

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

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

Oracle ——存储过程——分页

标签:style   color   int   rgb   type   name   

原文地址:http://www.cnblogs.com/nuaa/p/3703413.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!