--------------------声明-----------------------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的时候,也是提示类型不匹配我该怎样处理才行?
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的时候,也是提示类型不匹配我该怎样处理才行?
把dRs的类型改称varchar2 试试
那样还能返回记录集吗?
使用分析函数或者rownum实现这种分页功能吧, 你这样做太消耗系统资源了^_^
高手请指点一二,分析函数怎么做