根据网上流传的版本,修改而成,加入了新的重载。包定义如下:

 1 /*****************************************************************
 2  *功能描述: 大数据量分页通用存储过程包定义
 3  *创建人:   Melodicsoul    
 4  *创建时间: 2007-05-28
 5  *****************************************************************/
 6 create or replace package p_page is
 7 type refCursorType is REF CURSOR;  --游标类型定义,用于返回数据集
 8 procedure sp_Page(p_PageSize int,          --每页记录数
 9                   p_PageNo int,            --当前页码,从 1 开始
10                   p_SqlSelect varchar2,    --查询语句,含排序部分
11                   p_OutRecordCount out int,--返回总记录数
12                   p_OutCursor out refCursorType);
13 procedure sp_Page(p_PageSize int,          --每页记录数
14                   p_PageNo int,            --当前页码,从 1 开始
15                   p_SqlSelect varchar2,    --查询语句,含排序部分
16                   p_SqlCount varchar2,     --获取记录总数的查询语句
17                   p_OutRecordCount out int,--返回总记录数
18                   p_OutCursor out refCursorType);
19 procedure sp_Page(p_PageSize int,        --每页记录数
20                   p_PageNo int,          --当前页码,从 1 开始
21                   p_SqlSelect varchar2,  --查询语句,含排序部分
22                   p_OutCursor out refCursorType);
23 procedure sp_Page(p_SqlSelect varchar2,    --查询语句,含排序部分
24                   p_OutRecordCount out int); --返回总记录数
25 end p_page;

包主体:

  1 CREATE OR REPLACE PACKAGE BODY p_page as
  2 procedure sp_Page(p_PageSize int,          --每页记录数
  3                   p_PageNo int,            --当前页码,从 1 开始
  4                   p_SqlSelect varchar2,    --查询语句,含排序部分
  5                   p_OutRecordCount out int,--返回总记录数
  6                   p_OutCursor out refCursorType)
  7 as
  8     v_sql varchar2(3000);
  9     v_count int;
 10     v_heiRownum int;
 11     v_lowRownum int;
 12 begin
 13   ----取记录总数
 14   v_sql := 'select count(*) from (' || p_SqlSelect || ')';
 15   execute immediate v_sql into v_count;
 16   p_OutRecordCount := v_count;
 17   ----执行分页查询
 18   v_heiRownum := p_PageNo * p_PageSize;
 19   v_lowRownum := v_heiRownum - p_PageSize + 1;
 20 
 21   v_sql := 'SELECT *
 22             FROM (
 23                   SELECT A.*, rownum rn
 24                   FROM  ('|| p_SqlSelect ||') A
 25                   WHERE rownum <= '|| to_char(v_heiRownum) || '
 26                  ) B
 27             WHERE rn >= ' || to_char(v_lowRownum) ;
 28             --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn
 29 
 30   OPEN p_OutCursor FOR  v_sql;
 31 
 32 end sp_Page;
 33 
 34 /*****************************************************************
 35  *功能描述: 大数据量分页通用存储过程(重载1,推荐使用)
 36  *创建人:   Melodicsoul    
 37  *创建时间: 2007-05-28
 38  *****************************************************************/
 39 procedure sp_Page(p_PageSize int,          --每页记录数
 40                   p_PageNo int,            --当前页码,从 1 开始
 41                   p_SqlSelect varchar2,    --查询语句,含排序部分
 42                   p_SqlCount varchar2,     --获取记录总数的查询语句
 43                   p_OutRecordCount out int,--返回总记录数
 44                   p_OutCursor out refCursorType)
 45 as
 46     v_sql varchar2(3000);
 47     v_count int;
 48     v_heiRownum int;
 49     v_lowRownum int;
 50 begin
 51   ----取记录总数
 52   execute immediate p_SqlCount into v_count;
 53   p_OutRecordCount := v_count;
 54   ----执行分页查询
 55   v_heiRownum := p_PageNo * p_PageSize;
 56   v_lowRownum := v_heiRownum - p_PageSize + 1;
 57 
 58   v_sql := 'SELECT *
 59             FROM (
 60                   SELECT A.*, rownum rn
 61                   FROM  ('|| p_SqlSelect ||') A
 62                   WHERE rownum <= '|| to_char(v_heiRownum) || '
 63                  ) B
 64             WHERE rn >= ' || to_char(v_lowRownum) ;
 65             --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn
 66 
 67   OPEN p_OutCursor FOR  v_sql;
 68 
 69 end sp_Page;
 70 
 71 /*****************************************************************
 72  *功能描述: 大数据量分页通用存储过程(重载2)
 73  *创建人:   Melodicsoul    
 74  *创建时间: 2007-05-28
 75  *****************************************************************/
 76 procedure sp_Page(p_PageSize int,        --每页记录数
 77                   p_PageNo int,          --当前页码,从 1 开始
 78                   p_SqlSelect varchar2,  --查询语句,含排序部分
 79                   p_OutCursor out refCursorType)
 80 as
 81     v_sql varchar2(3000);
 82     --v_count int;
 83     v_heiRownum int;
 84     v_lowRownum int;
 85 begin
 86 /*
 87   ----取记录总数
 88   v_sql := 'select count(*) from (' || p_SqlSelect || ')';
 89   execute immediate v_sql into v_count;
 90   p_OutRecordCount := v_count;
 91 */
 92   ----执行分页查询
 93   v_heiRownum := p_PageNo * p_PageSize;
 94   v_lowRownum := v_heiRownum - p_PageSize + 1;
 95 
 96   v_sql := 'SELECT *
 97             FROM (
 98                   SELECT A.*, rownum rn
 99                   FROM  ('|| p_SqlSelect ||') A
100                   WHERE rownum <= '|| to_char(v_heiRownum) || '
101                  ) B
102             WHERE rn >= ' || to_char(v_lowRownum) ;
103             --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn
104 
105   OPEN p_OutCursor FOR  v_sql;
106 end sp_Page;
107 /*****************************************************************
108  *功能描述: 大数据量分页通用存储过程(重载3)
109  *创建人:   Melodicsoul    
110  *创建时间: 2007-05-28
111  *****************************************************************/
112 procedure sp_Page(p_SqlSelect varchar2,    --查询语句,含排序部分
113                   p_OutRecordCount out int)--返回总记录数            
114 as
115     v_sql varchar2(3000);
116     v_count int;
117 begin
118   ----取记录总数
119   v_sql := 'select count(*) from (' || p_SqlSelect || ')';
120   execute immediate v_sql into v_count;
121   p_OutRecordCount := v_count;
122 end sp_Page;
123 end p_page;

调用的C#代码(此处是EnterpriseLibrary3.0+AspnetPager):

 1         /// <summary>
 2         /// 取总记录数 
 3         /// 创建人:   Melodicsoul(http://wintersun.cnblogs.com) 
 4         /// 创建时间: 2007-06-10
 5         /// </summary>
 6         private void GetCount()
 7         {
 8             Database db = DatabaseFactory.CreateDatabase("OracleConnection");
 9             string sqlCommand = "P_PAGE.sp_Page";
10             DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);
11             db.AddInParameter(dbCommand, "p_SqlSelect", DbType.String, "sys_operator");
12             db.AddOutParameter(dbCommand, "p_OutRecordCount", DbType.Int32, 4);
13             db.ExecuteNonQuery(dbCommand);
14             Pager1.RecordCount = (int)dbCommand.Parameters["p_OutRecordCount"].Value;
15             BindData2();
16         }
17         /// <summary>
18         /// OracleDataBase 绑定数据
19         /// 创建人:   Melodicsoul (http://wintersun.cnblogs.com)    
20         /// 创建时间: 2007-06-10
21         /// </summary>
22         private void BindData2()
23         {
24             OracleDatabase db = new OracleDatabase(System.Configuration.ConfigurationManager.ConnectionStrings["OracleConnection"].ToString());
25             string sqlCommand = "P_PAGE.sp_Page";
26             OracleCommand dbCommand = (OracleCommand)db.GetStoredProcCommand(sqlCommand);
27            
28             db.AddInParameter(dbCommand, "p_PageSize", DbType.Int32, Pager1.PageSize);
29             db.AddInParameter(dbCommand, "p_PageNo", DbType.Int32, Pager1.CurrentPageIndex);
30             db.AddInParameter(dbCommand, "p_SqlSelect", DbType.String, "Select * from sys_operator");
31 
32             dbCommand.Parameters.Add("p_OutCursor", OracleType.Cursor).Direction = ParameterDirection.Output;
33             this.GridView1.DataSource = db.ExecuteReader(dbCommand);
34             this.GridView1.DataBind();
35           
36         }

Oracle通用分页包相关推荐

  1. oracle通用分页语句rownum

    2019独角兽企业重金招聘Python工程师标准>>> select * from ( select t.*,rownum rn from(select * from emp whe ...

  2. oracle高效分页查询总结

    本文参考链接:http://blog.sina.com.cn/s/blog_8604ca230100vro9.html 探索查询语句: --分页参数:size = 20 page = 2 --没有or ...

  3. c oracle 分页工具类,Util工具类 跨Oracle、MySQL通用分页查询

    /**** 跨Oracle.MySQL通用分页查询*/public classPagingUtil { public static finalString MYSQL= "MYSQL&quo ...

  4. Oracle 存储过程之通用分页查询

    在数据库中书写通用分页存储过程,有利于代码的维护以及执行效率的提升 create or replace procedure Sp_QueryDatePage (tableName in varchar ...

  5. C#调用Oracle存储过程分页

    直接调用Oracle中的存储过程完成对表的分页,对代码封闭程度高,执行高效.以下为C#分页类代码,包括Oracle数据库 端存储过程PLSQL代码. //    程序调用示例: // int tota ...

  6. Oracle的分页实现

    转载自  Oracle的分页实现 在Oracle中实现分页的方法大致分为两种,用ROWNUM关键字和用ROWID关键字,下面来详细介绍一下: 1.ROWNUM 其代码为: SELECT *FROM ( ...

  7. 使用工具类实现通用分页处理

    使用工具类实现通用分页处理 原文发表在JavaResearch.org http://www.misslog.com/blog/detail.asp?blog_id=6&content_id= ...

  8. oracle万能分页代码,Oracle万能分页法的存储过程

    Oracle万能分页法的存储过程 --创建一个包,在包中定义一个 游标类型 create or replace package testfenyepackage as type test Oracle ...

  9. MySQL关键字union,limit,通用分页

    关键字union,limit,通用分页 union合并查询结果集 案例:查询工作岗位是MANAGER和SALESMAN的员工 //写法一 select ename,job from emp where ...

最新文章

  1. mongodb 运行状况,索引构建分析
  2. Jupyter 快速入门——写python项目博客非常有用!!!
  3. IOS开发-GitHub使用详解
  4. 自信息/熵/联合熵/条件熵/相对熵/交叉熵/互信息及其相互之间的关系
  5. xy坐标正负方向_道路施工图纸上x坐标和y坐标分别代表什么方向,哪个代表南北方向,哪个代表东西方向?...
  6. Java:使用Fork / Join框架的Mergesort
  7. Android中ICS4.0Launcher中Fold的功能详解【androidICS4.0--Launcher系列三】
  8. Eureka Server报错:Retry limit reached; giving up on complet the request
  9. C专家编程 第9章 再论数组 9.6 C语言的多维数组
  10. Linux Ubuntu NVIDIA双显卡切换intel显卡方法, 如果无法正常切换
  11. 用 Python 写了一个表白神器,照片隐藏表白话语!
  12. 【好消息】高录用、EI检索会议 | 2023年第二届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2023)
  13. java版破解淘宝客加密推广链接
  14. linux下ntp对时设置
  15. CTF MISC压缩包简单题学习思路总结(持续更新)
  16. 初中计算机罗辑思维测试,逻辑思维能力测试20题_数学教学中学生创造思维能力的培养...
  17. Java提取文本中的超链接添加a标签
  18. 网站运营三个阶段与运营指标
  19. 关于win11电脑无法正常关机的解决方案 2022年3月8日 10:50:48更新版
  20. android popupwindow边框阴影,android PopupWindow 阴影背景 、动画 、点击显示、隐藏

热门文章

  1. 摆摆控件,就可以实现多功能(提交、修改、浏览)的表单了[原]
  2. TeamViewer试用期满转免费版本方法
  3. lable、ul、ol、dl和table、fieldset标签
  4. Python基本语法_变量作用域LEGB
  5. 关于技术学习的思考【转】
  6. 升级nginx以支持http2的方法
  7. 极力推荐python初学者使用wingIDE
  8. VMware Workstations三种网卡模式
  9. 《Ceph源码分析》——第1章,第5节RADOS
  10. 关于网络上的各种mysql性能测试结论