我正在使用的,供您参考
create or replace procedure sp_select
(
tblName nvarchar2, -- 表名
doCount number := 0, -- 返回记录总数, 0 False 默认返回具体的记录, 非 0 True 返回记录的总数
strGetFields nvarchar2 := '*',-- 需要返回的列 默认返回全部列
OrderField nvarchar2 := ' ', -- 排序的字段名
OrderType number := 0, -- 设置排序类型, 0 False 默认升序, 非 0 True 降序
strWhere nvarchar2 := ' ', -- 查询条件 (注意: 不要加 where) 默认为空
PageSize number := 10, -- 页尺寸 默认为10条
PageIndex number := 1, -- 页码 默认为第1页
mycs out sys_refcursor
)
as
strSQL varchar2(32767); -- 主语句
strTmp varchar2(100); -- 临时变量
strOrder varchar2(100); -- 排序类型
begin
if doCount != 0 then --如果@doCount传递过来的不是0,就执行总数统计
begin
if strWhere != ' ' then
strSQL := 'select count(1) as Total from '||tblName||' where '||strWhere ;
else
strSQL := 'select count(1) as Total from '||tblName ;
end if;
end;
else --以下的所有代码都是doCount为0 的情况,即要求返回具体的记录
begin
if OrderType != 0 then --如果OrderType不是0,就执行降序。
begin
strTmp := '<(select min';
strOrder := ' order by '||OrderField||' desc' ;
end;
else
begin
strTmp := '>(select max' ;
strOrder := ' order by '||OrderField||' asc' ;
end;
end if;
if PageIndex = 1 then --如果是第一页就执行以下代码,这样会加快执行速度。
begin
if strWhere != ' ' then
strSQL := 'select * from (select '||strGetFields|| ' from '||tblName ||' where ('||strWhere || ') '||strOrder ||') where rownum<='||PageSize;
else
strSQL := 'select * from (select '||strGetFields|| ' from '||tblName ||' '||strOrder||') where rownum<='||PageSize ;
end if;
end;
else --如果不是第一页,就要加上取数的条件。
begin
if strWhere != ' ' then
strSQL := 'select * from (select '|| strGetFields || ' from '||tblName||'
where '||OrderField||' '||strTmp||'('||OrderField||') from (select * from (select '||OrderField||'