oracle中建分页查询的存储过程

来源:百度知道 编辑:UC知道 时间:2024/06/27 11:20:40
因为数据库中的数据量比较大,所以我想建一个只返回某分页结果的存储过程,但貌似ORACLE中不能直接支持多维数组,所以总是没办法获得需要的结果。
举个例子:
create talbe abc (
id number(10),
name varchar2(20),
text varchar2(50),
notes varchar2(20),
mydate date(20),
);
这样一个表,中间有N条记录,我需要的是按每页所需的条数返回结果的存储过程。

数据库中定义一个包,定义游标类型,比如可以这样:
create or replace package package_name
as
type outcur is ref cursor;
end ;
然后存储过程返回结果集:
create procedure ttt( p_cur out package_name.outcur) as
begin open p_cur for
select ......;
end;

这样就可以返回结果集了.
如果数据量太大,返回全部记录再通过程序控制分页意义不大,效率同样太低,楼上的那个rownbr我没听过,只知道rownum,但这个伪列是不能满足分页要求的,如果数据量非常大,快速分页的话可以考虑用rowid这个列,
试试
select rowid from 任意表;
能看出结果了吧.剩下的自己想办法吧.

有一种办法,oracle中,可以显示rownbr
如:select * from table_name where rownbr>=2 and rownbr>=10;
则最后显示的是第二到第十行数据
所以你可以把rownbr>=2和rownbr>=10设置成存储过程中的一个变量,执行存储过程时输入起始行数和结束行数