Oracle ——存储过程——分页

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

--首先,创建一个包,定义游标类型
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 ——存储过程——分页,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。