create or replace package Tools
is
  type ResultData is ref cursor;
  procedure sp_Page(p_PageSize int,          --每页记录数
                  p_PageNo int,            --当前页码,从 1 开始
                  p_SqlSelect varchar2,    --查询语句,含排序部分
                  p_SqlCount varchar2,     --获取记录总数的查询语句
                  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_SqlSelect varchar2,    --查询语句,含排序部分
                  p_SqlCount varchar2,     --获取记录总数的查询语句
                  p_OutRecordCount out int,--返回总记录数
                  p_OutCursor out ResultData)
  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;end Tools;这是一个网上下的存储过程分页,也基本看懂了,可是我在oracle8i上运行后,查看包,有错误,点过程里的parameter时提示错误。
请大家帮忙看看错在哪里?谢谢了

解决方案 »

  1.   

    p_PageSize int,          --每页记录数 
                      p_PageNo int,            --当前页码,从 1 开始 
                      p_SqlSelect varchar2,    --查询语句,含排序部分 
                      p_SqlCount varchar2,    --获取记录总数的查询语句 
                      p_OutRecordCount out int,--返回总记录数 
                      p_OutCursor out ResultData);