Oracle大数据量分页通用存储过程

转载 2006年06月06日 15:18:00
Oracle大数据量分页通用存储过程

/*根据网友资料修改的,见笑了*/

type refCursorType is REF CURSOR; --游标类型定义,用于返回数据集

/*****************************************************************
*功能描述: 大数据量分页通用存储过程
*创 建 人: 夏春涛 xchuntao@163.com qq:23106676
*创建时间: 2005-06-29
*****************************************************************/
procedure sp_Page(p_PageSize int, --每页记录数
p_PageNo int, --当前页码,从 1 开始
p_SqlSelect varchar2, --查询语句,含排序部分
p_OutRecordCount out int,--返回总记录数
p_OutCursor out refCursorType)
as
v_sql varchar2(3000);
v_count int;
v_heiRownum int;
v_lowRownum int;
begin
----取记录总数
v_sql := 'select count(*) from (' || p_SqlSelect || ')';
execute immediate v_sql into v_count;
p_OutRecordCount := v_count;
----执行分页查询
v_heiRownum := p_PageNo * p_PageSize;
v_lowRownum := v_heiRownum - p_PageSize + 1;

v_sql := 'SELECT *
FROM (
SELECT A.*, rownum rn
FROM ('|| p_SqlSelect ||') A
WHERE rownum <= '|| to_char(v_heiRownum) || '
) B
WHERE rn >= ' || to_char(v_lowRownum) ;
--注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn

OPEN p_OutCursor FOR v_sql;

end sp_Page;

/*****************************************************************
*功能描述: 大数据量分页通用存储过程(重载1,推荐使用)
*创 建 人: 夏春涛
*创建时间: 2005-07-01
*****************************************************************/
procedure sp_Page(p_PageSize int, --每页记录数
p_PageNo int, --当前页码,从 1 开始
p_SqlSelect varchar2, --查询语句,含排序部分
p_SqlCount varchar2, --获取记录总数的查询语句
p_OutRecordCount out int,--返回总记录数
p_OutCursor out refCursorType)
as
v_sql varchar2(3000);
v_count int;
v_heiRownum int;
v_lowRownum int;
begin
----取记录总数
execute immediate p_SqlCount into v_count;
p_OutRecordCount := v_count;
----执行分页查询
v_heiRownum := p_PageNo * p_PageSize;
v_lowRownum := v_heiRownum - p_PageSize + 1;

v_sql := 'SELECT *
FROM (
SELECT A.*, rownum rn
FROM ('|| p_SqlSelect ||') A
WHERE rownum <= '|| to_char(v_heiRownum) || '
) B
WHERE rn >= ' || to_char(v_lowRownum) ;
--注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn

OPEN p_OutCursor FOR v_sql;

end sp_Page;

/*****************************************************************
*功能描述: 大数据量分页通用存储过程(重载2)
*创 建 人: 夏春涛
*创建时间: 2005-07-01
*****************************************************************/
procedure sp_Page(p_PageSize int, --每页记录数
p_PageNo int, --当前页码,从 1 开始
p_SqlSelect varchar2, --查询语句,含排序部分
p_OutCursor out refCursorType)
as
v_sql varchar2(3000);
--v_count int;
v_heiRownum int;
v_lowRownum int;
begin
/*
----取记录总数
v_sql := 'select count(*) from (' || p_SqlSelect || ')';
execute immediate v_sql into v_count;
p_OutRecordCount := v_count;
*/
----执行分页查询
v_heiRownum := p_PageNo * p_PageSize;
v_lowRownum := v_heiRownum - p_PageSize + 1;

v_sql := 'SELECT *
FROM (
SELECT A.*, rownum rn
FROM ('|| p_SqlSelect ||') A
WHERE rownum <= '|| to_char(v_heiRownum) || '
) B
WHERE rn >= ' || to_char(v_lowRownum) ;
--注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn

OPEN p_OutCursor FOR v_sql;

end sp_Page;

Oracle使用存储过程分页

今天我要说的就是基于Oracle存储过程的一种简单的分页方式,首先就是页面前端发起对分页的请求,然后向Oracle存储过程中传入页面当前数,页面大小,查询的SQL语句,而存储过程返回来的则是数据总条数...
  • lingyiwin
  • lingyiwin
  • 2016年04月26日 17:31
  • 1605

oracle存储过程将某张表一个字段的多值分开成多条数据插入到一张新表

create or replace PROCEDURE PRO_MANDATESCOPE (dataid in varchar2,tablename in varchar2 ) AS ...
  • qq_26676207
  • qq_26676207
  • 2016年06月30日 18:30
  • 2673

oracle 存储过程 利用数组类型type实现批量插入数据库

Oracle没有数组类型,如果要传递
  • u011054048
  • u011054048
  • 2014年11月22日 20:43
  • 1892

Oracle大数据量分页通用存储过程

type refCursorType is REF CURSOR;  --游标类型定义,用于返回数据集 /**********************************************...
  • bingtingabc
  • bingtingabc
  • 2012年05月24日 18:29
  • 375

大数据量分页 存储过程

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话。   测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软...
  • fireman_me
  • fireman_me
  • 2011年08月24日 16:00
  • 303

sql2000,千万级大数据量分页存储过程效率测试附代码

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话。   测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软...
  • zhenyuanjie
  • zhenyuanjie
  • 2012年07月24日 10:11
  • 2190

大数据量分页存储过程效率测试附代码

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话。   测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软件:Window...
  • jiangfei009003
  • jiangfei009003
  • 2014年06月05日 09:04
  • 504

大数据量分页存储过程效率测试附测试代码与结果

测试环境 硬件:CPU 酷睿双核T5750 内存:2G 软件:Windows server 2003 + sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中...
  • hliq5399
  • hliq5399
  • 2016年03月29日 16:38
  • 926

大数据量分页存储过程效率测试

我首先写了五个常用存储过程:1,利用select top 和select not in进行分页,具体代码如下: CREATE PROCEDURE Proc_paged_with_notin --利用s...
  • WuLex
  • WuLex
  • 2017年03月08日 15:46
  • 852

大数据量分页存储过程效率测试附代码

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话。 测试环境硬件:CPU 酷睿双核T5750  内存:2G软件:Windows server...
  • abaal888
  • abaal888
  • 2011年05月19日 11:21
  • 449
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle大数据量分页通用存储过程
举报原因:
原因补充:

(最多只允许输入30个字)