Oracle通用分页包
根据网上流传的版本,修改而成,加入了新的重载。包定义如下:
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;
包主体:
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):
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通用分页包相关推荐
- oracle通用分页语句rownum
2019独角兽企业重金招聘Python工程师标准>>> select * from ( select t.*,rownum rn from(select * from emp whe ...
- oracle高效分页查询总结
本文参考链接:http://blog.sina.com.cn/s/blog_8604ca230100vro9.html 探索查询语句: --分页参数:size = 20 page = 2 --没有or ...
- c oracle 分页工具类,Util工具类 跨Oracle、MySQL通用分页查询
/**** 跨Oracle.MySQL通用分页查询*/public classPagingUtil { public static finalString MYSQL= "MYSQL&quo ...
- Oracle 存储过程之通用分页查询
在数据库中书写通用分页存储过程,有利于代码的维护以及执行效率的提升 create or replace procedure Sp_QueryDatePage (tableName in varchar ...
- C#调用Oracle存储过程分页
直接调用Oracle中的存储过程完成对表的分页,对代码封闭程度高,执行高效.以下为C#分页类代码,包括Oracle数据库 端存储过程PLSQL代码. // 程序调用示例: // int tota ...
- Oracle的分页实现
转载自 Oracle的分页实现 在Oracle中实现分页的方法大致分为两种,用ROWNUM关键字和用ROWID关键字,下面来详细介绍一下: 1.ROWNUM 其代码为: SELECT *FROM ( ...
- 使用工具类实现通用分页处理
使用工具类实现通用分页处理 原文发表在JavaResearch.org http://www.misslog.com/blog/detail.asp?blog_id=6&content_id= ...
- oracle万能分页代码,Oracle万能分页法的存储过程
Oracle万能分页法的存储过程 --创建一个包,在包中定义一个 游标类型 create or replace package testfenyepackage as type test Oracle ...
- MySQL关键字union,limit,通用分页
关键字union,limit,通用分页 union合并查询结果集 案例:查询工作岗位是MANAGER和SALESMAN的员工 //写法一 select ename,job from emp where ...
最新文章
- mongodb 运行状况,索引构建分析
- Jupyter 快速入门——写python项目博客非常有用!!!
- IOS开发-GitHub使用详解
- 自信息/熵/联合熵/条件熵/相对熵/交叉熵/互信息及其相互之间的关系
- xy坐标正负方向_道路施工图纸上x坐标和y坐标分别代表什么方向,哪个代表南北方向,哪个代表东西方向?...
- Java:使用Fork / Join框架的Mergesort
- Android中ICS4.0Launcher中Fold的功能详解【androidICS4.0--Launcher系列三】
- Eureka Server报错:Retry limit reached; giving up on complet the request
- C专家编程 第9章 再论数组 9.6 C语言的多维数组
- Linux Ubuntu NVIDIA双显卡切换intel显卡方法, 如果无法正常切换
- 用 Python 写了一个表白神器,照片隐藏表白话语!
- 【好消息】高录用、EI检索会议 | 2023年第二届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2023)
- java版破解淘宝客加密推广链接
- linux下ntp对时设置
- CTF MISC压缩包简单题学习思路总结(持续更新)
- 初中计算机罗辑思维测试,逻辑思维能力测试20题_数学教学中学生创造思维能力的培养...
- Java提取文本中的超链接添加a标签
- 网站运营三个阶段与运营指标
- 关于win11电脑无法正常关机的解决方案 2022年3月8日 10:50:48更新版
- android popupwindow边框阴影,android PopupWindow 阴影背景 、动画 、点击显示、隐藏