我在数据库里写了一个过程如下:
CREATE OR REPLACE procedure GX_RLGL.UP_GetRecordByPage (tblName varchar2, -- 表名
fldName varchar2, -- 主键字段名
PageSize int , -- 页尺寸
PageIndex int, -- 页码
IsReCount int , -- 返回记录总数, 非 0 值则返回
OrderType int , -- 设置排序类型, 非 0 值则降序
strWhere varchar2) -- 查询条件 (注意: 不要加 where)
IS
strSQL varchar(6000); -- 主语句
strTmp varchar(100) ; -- 临时变量(查询条件过长时可能会出错,可修改100为1000)
strOrder varchar(400) ; -- 排序类型
begin
if OrderType <> 0 then
--strTmp := '<(select min';
strOrder := ' order by '||fldName||' desc';
else
--strTmp := '>(select max';
strOrder := ' order by ' ||fldName ||' asc';
end if;
if strWhere <> '' then
strSQL := ' select * from (select tblTmp.*, ROWNUM num FROM ((SELECT * FROM '|| tblName||'where'||strWhere||strOrder||') tblTmp ) WHERE ROWNUM <='||(PageSize*PageIndex)||') WHERE num>'||(PageSize*PageIndex-PageSize)||'and'||strWhere;
else
strSQL := ' select * from (select tblTmp.*, ROWNUM num FROM ((SELECT * FROM '|| tblName||') tblTmp ) WHERE ROWNUM <='||(PageSize*PageIndex)||') WHERE num>'||(PageSize*PageIndex-PageSize);
--strSQL := ' select * from (select tblTmp.*, ROWNUM num FROM ((SELECT * FROM '|| tblName||'where'||strWhere||strOrder||') tblTmp ) WHERE ROWNUM <='||(PageSize*PageIndex)||') WHERE num>'||(PageSize*PageIndex-PageSize)||'and'||strWhere;
end if;
if PageIndex = 1 then
strTmp :=' where';
if strWhere != '' then
strTmp := strTmp|| strWhere;
end if;
strSQL := 'select * from '
|| tblName || strTmp||' ROWNUM <='||PageSize|| strOrder;
end if;
if IsReCount <> 0 then
strSQL := 'select count(*) as Total from ' || tblName ||' where ' || strWhere;
end if;
execute immediate (strSQL);
end;
/
***************
Oracle 数据库,但在执行的时候报错:
DataSe