oracle存储过程分页

一、定义包 

create or replace package pg is

  
-- Author  : gjr
  -- Created : 
  -- Purpose : 
  
  
-- Public type declarations
  TYPE T_CURSOR IS REF CURSOR;
  
--分页
  PROCEDURE GetPageData(
      pageIndex 
integer,          --当前页
      pageSize integer,       --每页记录数
      tableName varchar2,     --表名     
      query varchar2,         --where语句 和 order by 语句
      totalCount out  number--总记录数
      v_cur out T_CURSOR      --返回当前页数据记录  

) ;
end pg;

 

二、定义包体

create or replace package body pg is

  
-- Author  : gjr
  -- Created : 
  -- Purpose : 分页
   PROCEDURE GetPageData( 
      pageIndex 
integer,         --当前页
      pageSize integer,      --每页记录数
      tableName varchar2,    --表名      
      query varchar2,        --where语句 和 order by 语句
      totalCount out number--总记录数
      v_cur out T_CURSOR     --返回当前页数据记录  
 ) 
AS 

v_sql 
VARCHAR2(5000); 
v_Plow 
number
v_Phei 
number
Psql 
varchar2(5000);
p_sql 
varchar2(5000);
v_tmp 
varchar2(5000);
v_TotalCount   
varchar2(50);  --总记录数
Begin 

--------------------------------显示任意页内容 
v_Phei := pageIndex* pageSize  ; 
v_Plow :
= v_Phei - pageSize + 1
p_sql:
='select t.* from '|| tableName ||' t where 1=1 '||query||' ' ; --要求必须包含rownum字段 
Psql := 'select rownum rn,a.* from ('|| p_sql ||') a ';
v_sql :
= 'select * from (' || Psql || ') where rn between ' || v_Plow || ' and ' || v_Phei; 

v_tmp :
= 'select count(*) as TotalCount from ('|| p_sql ||') a ';
execute immediate v_tmp into v_TotalCount;
totalCount  :
= v_TotalCount;

open v_cur for v_sql; 

End GetPageData; 
end pg;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值