--------------------声明-----------------------CREATE OR REPLACE PACKAGE "PK_PAGINATION"  is
  type D_CUR is REF CURSOR;
 
  PROCEDURE SP_PAGINATION(v_sql VARCHAR2,
                          v_pagesize INTEGER,
                          v_currpage INTEGER,
                          v_pagecount OUT INTEGER,
                          dRs OUT D_CUR);
end PK_PAGINATION;--------------------实现-----------------------
CREATE OR REPLACE PACKAGE BODY "PK_PAGINATION"  is
  PROCEDURE SP_PAGINATION(v_sql VARCHAR2,
                          v_pagesize INTEGER,
                          v_currpage INTEGER,
                          v_pagecount OUT INTEGER,
                          dRs OUT D_CUR)
  AS
    sRs D_CUR;
    --tRs sRs%ROWTYPE;<<<<<<<<<<<<<<<<<<<标号1>>>>>>>>>>>>>>>>>>>>
  BEGIN
       OPEN sRs FOR v_sql;
       --dRs:=sRs;<<<<<<<<<<<<<<<<<<<标号2>>>>>>>>>>>>>>>>>>>>
       LOOP
           FETCH sRs INTO dRs;<<<<<<<<<<<<<<<<<<<标号3>>>>>>>>>>>>>>>>>>>>
           EXIT WHEN sRs%NOTFOUND;
           
       END LOOP;
       v_pagecount:=sRs%ROWCOUNT/v_pagesize;
       CLOSE sRs;
  END SP_PAGINATION;
end PK_PAGINATION;
达人看一下上面的包,我是想送入过程一个SQL语句,然后根据该语句通过dRs返回<< 部分>> 记录集。
但我在执行标号3的语句时,总是提示数据类型不匹配,不管把标号1/标号2的语句都不要,还是把标号1或标号2启用。
OPEN sRs以后,如果不把sRs赋dRs的话,dRs就是NULL,在执行了标号2语句dRs不是NULL的时候,也是提示类型不匹配我该怎样处理才行?

解决方案 »

  1.   

    把dRs的类型改称varchar2 试试
      

  2.   

    使用分析函数或者rownum实现这种分页功能吧, 你这样做太消耗系统资源了^_^
      

  3.   

    回复人: phant0m(YO-YO) ( ) 信誉:100  2004-11-25 09:49:00  得分: 0  
     
     
       把dRs的类型改称varchar2 试试
      
     
    那样还能返回记录集吗?
      

  4.   

    回复人: jametong(jametong) ( ) 信誉:100  2004-11-25 12:48:00  得分: 0  
     
     
       使用分析函数或者rownum实现这种分页功能吧, 你这样做太消耗系统资源了^_^
      
     
    高手请指点一二,分析函数怎么做
      

  5.   

    想在FECTH 之后取%ROWCOUNT总记录数
      

  6.   

    那直接用select count(*) into cnt from test;