首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

oracle大数据量分页

2014-01-28 
有关oracle大数据量分页的问题?请问 在做数据量大的分页存储过程的时候 这个存储过程 是多表联合查询的 大

有关oracle大数据量分页的问题?

请问 在做数据量大的分页存储过程的时候 这个存储过程 是多表联合查询的 大慨 5张表左右吧
  请问这个时候该怎么做! 我的目的是要做成通用的 请大家给我一个简单例子即可!

------解决方法--------------------------------------------------------
通用的?就是表名和连接字段名作为参数传入?
会不会存在连接条件不止一个的情况
------解决方法--------------------------------------------------------
将要连接的表和连接条件作为传参..我觉得不是个好主意
可以试试建个过程,将分组字段,排序字段,页大小和页码作为条件传入
你先建好视图view1
执行这个存储过程对这个视图进行分页查询,生成视图view2
查询view2得到你要的结果
------解决方法--------------------------------------------------------
select top 页大小 *

这个是MSSQL的
------解决方法--------------------------------------------------------

SQL code
CREATE OR REPLACE PACKAGE BODY "GETPAGING" is 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;        

热点排行