ORACLE分页存储过程

来源:互联网 发布:淘宝改后台是什么意思 编辑:程序博客网 时间:2024/05/01 12:31

 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;

原创粉丝点击