您的位置:首页 > 数据库 > Oracle

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

2012-05-24 18:29 399 查看
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: