请问 在做数据量大的分页存储过程的时候 这个存储过程 是多表联合查询的 大慨 5张表左右吧
请问这个时候该怎么做!? 我的目的是要做成通用的 请高手给我一个简单例子即可 我自己摸索! 不胜感激~
请问这个时候该怎么做!? 我的目的是要做成通用的 请高手给我一个简单例子即可 我自己摸索! 不胜感激~
解决方案 »
- 新安装的ORACLE怎么配置环境。。。。着急在线等
- 从命令上导入数据库脚本123.dmp文件时,出现了以下错误,各位高手帮忙看看怎么回事?
- 怎样使用ORACLE10.2G的DBMS_crypto包或是透明加密方法加密数据
- 数据库文件巨大,并不断增长中~~~求救!
- oci 读取数据时返回列为空错误
- 已经没有了表空间了,oracle还在做什么呢?大惑!!
- 请教ORACLE多线程服务器MTS如何配置?
- 请问create table 返回值为2 是什么意思?
- 使用sql loader成批的添加数据,逻辑成功,但是没有提交,如何处理?
- 为什么oracle8i在这台机器上无法安装
- 使用OCI接口一定要安装oracle客户端么?
- 求两个SQL语句
select top 页大小 *
from table1
where id>
(select max (id) from
(select top ((页码-1)*页大小) id from table1 order by id) as T) order by id
这个里面只是对单表进行查询啊
如果我的SQL 语句是类似这样的
select f.username, h.loginname,h.getIntegral,h.useIntegral,m.remainintegral,m.usergrade,m.integralstate,f.customerid from (select sum(decode(sign(a.integral),'1',a.integral,0)) as getIntegral,sum(decode(sign(a.integral),'-1',a.integral,0)) as useIntegral,b.loginName from CTM_IntegralRec a left join CTM_Information b on a.customerid=b.customerId where a.cid=7001 group by b.loginname ) hright join (select c.username, c.customerid, c.loginname, c.provinceId,c.cityid,d.provinceName,d.cityname from CTM_Information cleft join CDE_City d on c.provinceId =d.provinceid and c.cityid=d.cityid where 1=1 and cid=7001) f on h.loginname=f.loginname right join Pan_UserIntegralInfo m on m.customersn = f.customerid where 1=1 and h.getIntegral > 0
的多表连接查询 那这个不能达到一个通用的效果了
所以....
可以试试建个过程,将分组字段,排序字段,页大小和页码作为条件传入
你先建好视图view1
执行这个存储过程对这个视图进行分页查询,生成视图view2
查询view2得到你要的结果
汗
这个是MSSQL的
Procedure Pagination
(
pageSize in number, --每页记录数
pageIndex in number, --页码
sourceName in varchar2, --表 名
FieldStr in varchar2, --字段集
primaryKey in varchar2, --主键
sourceFilter in varchar2, --过滤条件
sourceSort in varchar2, --排序集
sourceSortDir in number, --排序方式0:不排序;1:升序;2:降序
TotalCount out number, --总记录数
Cur_ReturnCur out T_CURSOR
)
is
l_MinRowNum number; --分页小值
l_MaxRowNum number; --分页大值
l_SortStr varchar2(100); --排序
l_SourceWhere varchar2(1000); --Where条件
l_TotalCount number; --总记录数
l_sql varchar2(1000); --动态sql
l_sql2 varchar2(1000); --动态sql
begin
l_MinRowNum:=pageSize*(pageIndex-1);
l_MaxRowNum:=pageSize*pageIndex; if sourceSortDir=1 then
if upper(sourceSort) = upper(primaryKey) then
l_SortStr:=' order by '||sourceSort||' asc';
else
l_SortStr:=' order by '||sourceSort||' asc,'||primaryKey;
end if;
end if;
if sourceSortDir=2 then
if upper(sourceSort) = upper(primaryKey) then
l_SortStr:=' order by '||sourceSort||' desc';
else
l_SortStr:=' order by '||sourceSort||' desc,'||primaryKey;
end if;
end if; if sourceFilter is NULL then
l_SourceWhere:='';
else
l_SourceWhere:=' where ' || sourceFilter;
end if;
l_sql:='(select '|| FieldStr ||' from '|| sourceName ||') Source1';
l_sql2:='select count(*) as TotalCount from '|| l_sql||' '|| l_SourceWhere;
execute immediate l_sql2 into l_TotalCount;
TotalCount:=l_TotalCount;
l_sql2:='select * from '|| l_sql ||' '|| l_SourceWhere ||' '|| l_SortStr ;
if (l_TotalCount>0) then
if (l_TotalCount>pageSize) then
l_sql2:='select * from '|| l_sql ||' '|| l_SourceWhere ||' '|| l_SortStr ;
if (pageIndex=1) then
l_sql2:='select Source2.* from ('|| l_sql2 ||') Source2 where rownum<='||pageSize;
else
l_sql2:='select Source2.*,rownum as RowIndex from ('|| l_sql2 ||') Source2';
l_sql2:='select Source3.* from ('|| l_sql2 ||') Source3 where RowIndex>'||l_MinRowNum||' and RowIndex<='||l_MaxRowNum;
end if;
end if;
end if;
open Cur_ReturnCur for l_sql2;
end Pagination;
end GetPaging;
我刚才也正准备问 那不是要建立多个视图 看来这个问题解决了
我想问一下 各位自己做的项目里面也是这种做法吗 我的意思是方法只有这一种?