3,499
社区成员
发帖
与我相关
我的任务
分享
create or replace procedure PROC_COMMPAGESIZE(
tblName in varchar2,--表名
strWhere in varchar2,--查询条件
strGetFields in varchar2, --查询字段
fldName in varchar2,--排序字段
OrderType in number,--排序方式 0升序 1降序
PageIndex in number,--当前页
PageSize in number,--每页显示的记录数
doCount out number,--总记录数
v_cur out pkg_PageQuery.cur_Pagequery)
is
v_sql1 VARCHAR2 (8000); --获取数据的sql语句
v_sql2 VARCHAR2 (8000);
v_pagecount NUMBER; --该条件下记录页数
v_row_start NUMBER; --开始记录
v_row_end NUMBER; --结束记录
v_count number;
begin
v_sql1 := 'select count(1) from ' || tblName;
IF strWhere is not null or strWhere <>'' THEN
v_sql1 := v_sql1 || ' where 1=1 and ' || strWhere;
END IF;
EXECUTE IMMEDIATE v_sql1 INTO doCount;
v_count:=doCount;
--计算数据记录开始和结束
v_pagecount := v_count / PageSize + 1;
v_row_start := (PageIndex - 1) * PageSize + 1;
v_row_end := PageIndex * PageSize;
v_sql2 := 'select rownum RowNo,'|| strGetFields || ' from ' || tblName ;
--v_sql2:='select rownum ro, t.* from ' || tblName || 't ';
v_sql2 := v_sql2 || ' where rownum<=' || v_row_end;
IF strWhere is not null or strWhere <>''
THEN
v_sql2 := v_sql2|| ' and ' || strWhere;
END IF;
if fldName is not null or fldName<>'' then
v_sql2 := v_sql2 || ' order by ' || fldName;
end if;
IF OrderType>0
THEN
v_sql2 := v_sql2 || ' desc';
END IF;
v_sql2 := 'select * from (' || v_sql2 || ') where RowNo >=' || v_row_start;
--DBMS_OUTPUT.put_line (strsql);
OPEN v_cur FOR v_sql2;
END PROC_COMMPAGESIZE;