各位大侠,下面是我写的一个分页的存储过程
1.包头
create or replace package albumOperation is
type type_cur is ref cursor;
procedure pagination(
Pindex in number ,
Psql in varchar2,
Psize in number,
Pcount out number,
V_cur out type_cur
);
end albumOperation;
2.包体
create or replace package body albumOperation is
PROCEDURE Pagination(
Pindex in number,--页索引(以1开头记数)
Psql in varchar2,--产生记录的SQL语句
Psize in number,--页大小
Pcount out number,--总页数
V_cur out type_cur--返回的页记录数
)
as
v_Pindex number;
v_sql varchar2(1000);
v_count number;
v_Plow number;
v_Phei number;
begin
v_sql:='select count(*) from ('|| Psql ||')';
------获取总记录数-----------
execute immediate v_sql into v_count;
-------得到总页数----------
Pcount:=ceil(v_count/Psize);
v_Pindex:=Pindex-1;
-------如果输入的索引小于1,那么返回第一页的数据-----------
if(v_Pindex<=0) then
v_Pindex:=1;
end if;
--------如果索引数大于页的总数,那么返回最后一页的数据--------------------------
if(v_Pindex>=Pcount) then
v_Pindex:=Pcount;
end if;
---------获取当前索引页的最小和最大记录的行号------------
v_Phei:=v_Pindex*Psize+Psize;
v_Plow:=v_Phei-Psize+1;
-------得到指写索引的记录-----------
v_sql:='select * from ( ' || Psql ||' ) where rn between '||v_Plow || ' and ' ||v_Phei;open v_cur for v_sql;
end Pagination;
end albumOperation;
3.然后我试图这样执行(在PLSQL中)这个存储过程
declare
countnum number;
v_cur albumOperation.type_cur%type;exec albumOperation.pagination(1,'select rownum as rn,t.* from users t',2,countnum,v_cur);
不知道为什么,总会报错,麻烦各位,帮我看看可以吗,先谢过了!
1.包头
create or replace package albumOperation is
type type_cur is ref cursor;
procedure pagination(
Pindex in number ,
Psql in varchar2,
Psize in number,
Pcount out number,
V_cur out type_cur
);
end albumOperation;
2.包体
create or replace package body albumOperation is
PROCEDURE Pagination(
Pindex in number,--页索引(以1开头记数)
Psql in varchar2,--产生记录的SQL语句
Psize in number,--页大小
Pcount out number,--总页数
V_cur out type_cur--返回的页记录数
)
as
v_Pindex number;
v_sql varchar2(1000);
v_count number;
v_Plow number;
v_Phei number;
begin
v_sql:='select count(*) from ('|| Psql ||')';
------获取总记录数-----------
execute immediate v_sql into v_count;
-------得到总页数----------
Pcount:=ceil(v_count/Psize);
v_Pindex:=Pindex-1;
-------如果输入的索引小于1,那么返回第一页的数据-----------
if(v_Pindex<=0) then
v_Pindex:=1;
end if;
--------如果索引数大于页的总数,那么返回最后一页的数据--------------------------
if(v_Pindex>=Pcount) then
v_Pindex:=Pcount;
end if;
---------获取当前索引页的最小和最大记录的行号------------
v_Phei:=v_Pindex*Psize+Psize;
v_Plow:=v_Phei-Psize+1;
-------得到指写索引的记录-----------
v_sql:='select * from ( ' || Psql ||' ) where rn between '||v_Plow || ' and ' ||v_Phei;open v_cur for v_sql;
end Pagination;
end albumOperation;
3.然后我试图这样执行(在PLSQL中)这个存储过程
declare
countnum number;
v_cur albumOperation.type_cur%type;exec albumOperation.pagination(1,'select rownum as rn,t.* from users t',2,countnum,v_cur);
不知道为什么,总会报错,麻烦各位,帮我看看可以吗,先谢过了!
解决方案 »
- Oracle表3表做关联UPDATE
- SQL、SQL 语句求解~~~~~~~~在线等.........等等等!!!!!!!1
- oem补充问题
- 帮我看看错在哪里?
- 在线等:Oracle的SQL语句:多个结果一起合并查询
- 救救我啊。。。。。。为什么order by子句在oracle中的使用出错。
- 字符集的问题,有过不同字符集数据库导入导出经验的大虾帮忙!
- 大文件在数据库里面放地址路径,文件放在外边,那么oracle要lob字段干什么,请解惑
- 用toad怎么获得sql语句执行的详细情况
- 树型搜索出问题了(高分)
- 请教各位大虾,在c#访问客户端的数据库视图时会提示客户数据库未开始一个事务处理,怎么处理呢,急急急!
- 用ADO连接Oracle和连接ACCESS有什么区别?
PROCEDURE Pagination(
Pindex in number,--页索引(以1开头记数)
Psql in varchar2,--产生记录的SQL语句
Psize in number,--页大小
Pcount out number,--总页数
V_cur out type_cur--返回的页记录数
看你的代码,并不单单是in 或out,你试试写成in out 吧。
而且如果执行过程前还要再指定参数类型:
declare
countnum number;
v_cur albumOperation.type_cur%type;
那只能说你之前干嘛去了,
countnum number;
v_cur albumOperation.type_cur;
begin
albumOperation.pagination(1,'select rownum as rn,t.* from tbb_msg t',2,countnum,v_cur);
sys.dbms_output.put_line('countnum='||to_char(countnum));
end;
/
countnum number;
v_cur albumOperation.type_cur;
begin
albumOperation.pagination(1,'select rownum as rn,t.* from users t',2,countnum,v_cur);
sys.dbms_output.put_line('countnum='||to_char(countnum));
end;
/
declare
变量声明
begin
主体
exception
异常处理
end;