整理的oracle数据库分页存储过程及示例

1、oracle数据库分页存储过程
CREATE   OR   REPLACE   PACKAGE DotNet   is

  TYPE type_cur 
IS  REF  CURSOR ;      -- 定义游标变量用于返回记录集
   PROCEDURE  DotNetPagination
  (
  Pindex 
in   number ,                 -- 分页索引
  Psql  in   varchar2 ,                 -- 产生dataset的sql语句
  Psize  in   number ,                  -- 页面大小
  Pcount out  number ,                -- 返回分页总数
  v_cur out type_cur                -- 返回当前页数据记录
  );
  
procedure  DotNetPageRecordsCount
  (
  Psqlcount 
in   varchar2 ,            -- 产生dataset的sql语句
  Prcount   out  number               -- 返回记录总数
  );
end  DotNet;
CREATE   OR   REPLACE   PACKAGE BODY DotNet"   is
 
-- ***************************************************************************************
   PROCEDURE  DotNetPagination
  (
  Pindex 
in   number ,
  Psql 
in   varchar2 ,
  Psize 
in   number ,
  Pcount out 
number ,
  v_cur out type_cur
  )
  
AS
  v_sql 
VARCHAR2 ( 1000 );
  v_count 
number ;
  v_Plow 
number ;
  v_Phei 
number ;
  
Begin
  
-- ----------------------------------------------------------取分页总数
  v_sql : =   ' select count(*) from ( '   ||  Psql  ||   ' ) ' ;
  
execute  immediate v_sql  into  v_count;
  Pcount :
=  ceil(v_count / Psize);
  
-- ----------------------------------------------------------显示任意页内容
  v_Phei : =  Pindex  *  Psize  +  Psize;
  v_Plow :
=  v_Phei  -  Psize  +   1 ;
  
-- Psql := 'select rownum rn,t.* from cd_ssxl t' ;            --要求必须包含rownum字段
  v_sql : =   ' select * from ( '   ||  Psql  ||   ' ) where rn between  '   ||  v_Plow  ||   '  and  '   ||  v_Phei ;
  
open  v_cur  for  v_sql;
  
End  DotNetPagination;
 
-- **************************************************************************************
   procedure  DotNetPageRecordsCount
  (
  Psqlcount 
in   varchar2 ,
  Prcount   out 
number
  )
  
as
  v_sql 
varchar2 ( 1000 );
  v_prcount 
number ;
  
begin
  v_sql :
=   ' select count(*) from ( '   ||  Psqlcount  ||   ' ) ' ;
  
execute  immediate v_sql  into  v_prcount;
  Prcount :
=  v_prcount;                   -- 返回记录总数
   end  DotNetPageRecordsCount;
 
-- **************************************************************************************
end  DotNet;
 
2、使用示例
        ///   <summary>
       
///  填充dataSet数据集-Oracle库
       
///   </summary>
       
///   <param name="pindex"> 当前页 </param>
       
///   <param name="psql"> 执行查询的SQL语句 </param>
       
///   <param name="psize"> 每页显示的记录数 </param>
       
///   <returns></returns>
       private   bool  gridbind( int  pindex,  string  psql,  int  psize)
     {
            OracleConnection conn 
=   new  OracleConnection();
            OracleCommand cmd 
=   new  OracleCommand();
            OracleDataAdapter dr 
=   new  OracleDataAdapter();
            conn.ConnectionString 
=  System.Configuration.ConfigurationManager.ConnectionStrings[ " ConnectionString " ].ConnectionString;
            cmd.Connection 
=  conn;
            cmd.CommandType 
=  CommandType.StoredProcedure;
            conn.Open();
            cmd.CommandText 
=   " DotNet.DotNetPageRecordsCount " ;
            cmd.Parameters.Add(
" psqlcount " , OracleType.VarChar).Value  =  psql;
            cmd.Parameters.Add(
" prcount " , OracleType.Number).Direction  =  ParameterDirection.Output;
            
            cmd.ExecuteNonQuery();
            
string  PCount  =  cmd.Parameters[ " prcount " ].Value.ToString();
            cmd.Parameters.Clear();
            cmd.CommandText 
=   " DotNet.DotNetPagination " ;
            
if  (pindex  !=   0 )
            {
                cmd.Parameters.Add(
" pindex " , OracleType.Number).Value  =  pindex  -   1 ;
            }
            
else
            {
                cmd.Parameters.Add(
" pindex " , OracleType.Number).Value  =  pindex;
            }
            cmd.Parameters.Add(
" psql " , OracleType.VarChar).Value  =  psql;
            cmd.Parameters.Add(
" psize " , OracleType.Number).Value  =  psize;
            cmd.Parameters.Add(
" v_cur " , OracleType.Cursor).Direction  =  ParameterDirection.Output;
            cmd.Parameters.Add(
" pcount " , OracleType.Number).Direction  =  ParameterDirection.Output;
            dr.SelectCommand 
=  cmd;
            
try
            {
                ds 
=   new  DataSet();
                dr.Fill(ds);
                
// 显示页码条的状态
                showStatus(Convert.ToInt32(cmd.Parameters[ " pindex " ].Value)  +   1 ,
                    Convert.ToInt32(cmd.Parameters[
" pcount " ].Value),
                    Convert.ToInt32(PCount));
                
for  ( int  i  =   0 ; i  <  ds.Tables.Count; i ++ )
                { 
// 把数据行为零的表删除
                     if  (ds.Tables[i].Rows.Count  ==   0 )
                        ds.Tables.Remove(ds.Tables[i].TableName);
                }
            }
            
catch  (Exception ex)
            {
                Console.WriteLine(ex.Message);
                
return   false ;
            }
 
            conn.Close();
            
return   true ;
      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值