分页控件
使用存储过程的分页控件可以设置最大页数为多少页 ,如果要强制使用索引
,请在查询字段里面增加/*+ index(tablename,indexname)*/
ProcedurePager需要下面一个存储过程
create or replace package ProcedurePager is
Type my_Cursor Is Ref Cursor;
--用户日报表
Procedure Per_QuickPage
(
TbName in varchar2, --表名
FieldStr in varchar2, --字段集
RowFilter in varchar2, --过滤条件
SortStr in varchar2, --排序集
Pagesize in number, --分页大小
currentindex in number,
TotalCount out number, --总记录数
MaxPageSize in number,
returncur out my_Cursor --返回的游标
);
end ProcedurePager;
/**/
create or replace package body ProcedurePager is
Procedure Per_QuickPage
(
TbName in varchar2, --表 名
FieldStr in varchar2, --字段集
RowFilter in varchar2, --过滤条件
SortStr in varchar2, --排序集
Pagesize in number, --分页大小
Currentindex in number,
TotalCount out number,--总记录数
MaxPageSize in number,--最大返回记录数
Returncur out my_Cursor --返回的游标
)
is
v_SourceTb1 varchar2(3000); --动态表名1
v_SourceTb2 varchar2(3000); --动态表名1
--v_TotalCount integer; --总记录数
v_sql varchar2(3000);
v_index number; --动态sql
--maxpagesize number :=300;
begin
v_index:=Currentindex;
if(v_index>maxpagesize) then
v_index:=maxpagesize;
end if;
--Dbms_Output.put_line(v_index);
--Dbms_Output.put_line(PageSize);
--P2p_Packages.My_PutLine(to_char(v_index));
-- P2p_Packages.My_PutLine(to_char(PageSize));
v_SourceTb1 := 'select rownum 编号,'|| FieldStr ||' from '|| TbName ||' where '||RowFilter;
v_SourceTb2 := v_SourceTb1||' and rownum<= '||(v_index*Pagesize)||' '||SortStr;
v_sql := 'select count(*) as TotalCount from ('|| v_SourceTb1||') a';
-- P2p_Packages.My_PutLine(v_sql,255,true);
execute immediate v_sql into TotalCount;
--TotalCount:=v_TotalCount;
while(TotalCount<=Pagesize*(v_index-1)) loop
v_index:=v_index-1;
end loop;
if(v_index<1) then
v_index:=1;
end if;
v_sql := 'select b.* from ('|| v_SourceTb2 ||') b where 编号 >'||(v_index-1)*Pagesize;
--P2p_Packages.My_PutLine(v_sql,255,true);
open Returncur for v_sql;
end Per_QuickPage;
END ProcedurePager;