您的位置:首页 > 其它

ORACLE分页存储过程

2009-04-02 23:31 225 查看
create or replace package Tools
is
type ResultData is ref cursor;
procedure sp_Page(p_PageSize int, --每页记录数
p_PageNo int, --当前页码,从 1 开始

p_OutRecordCount out int,--返回总记录数
p_OutCursor out ResultData);

end Tools;

create or replace package body Tools
is
procedure sp_Page(p_PageSize int, --每页记录数
p_PageNo int, --当前页码,从 1 开始

p_OutRecordCount out int,--返回总记录数
p_OutCursor out ResultData)
as
v_sql varchar2(3000);
v_count varchar2(3000);
v_SqlSelect varchar2(3000);
v_prcount number;
v_heiRownum int;
v_lowRownum int;
begin
----取记录总数
v_count:='select count(*)from grade';
execute immediate v_count into v_prcount;
p_OutRecordCount := v_prcount;
----执行分页查询
v_heiRownum := p_PageNo * p_PageSize;
v_lowRownum := v_heiRownum - p_PageSize +1;
v_SqlSelect := 'select * from grade';
v_sql := 'SELECT *
FROM (
SELECT A.*, rownum rn
FROM ('|| v_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;

end Tools;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: