ORACLE SELECT 实现分页查询的方法

  • A+
所属分类:网络生活

分页查询格式:SELECT * FROM(SELECT A.*, ROWNUM RNFROM (SELECT * FROM TABLE_NAME) AWHERE ROWNUM <= 40)WHERE RN >= 21其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。这是,查询语句如下:SELECT * FROM(SELECT A.*, ROWNUM RNFROM (SELECT * FROM TABLE_NAME) A)WHERE RN BETWEEN 21 AND 40下面是Copy的一个Oracle分页的存储过程:create or replace procedure KnowledgePagerCount(p_PageSize number,          --每页记录数                  p_PageNo number,            --当前页码,从 1 开始                  p_SqlSelect varchar2,    --查询语句,含排序部分                  p_OutRecordCount out number,--返回总记录数                  cur_OUT out GM.PAGER.refCursorType)as    v_sql varchar2(3000);    v_count number;    v_heiRownum number;    v_lowRownum number;begin----取记录总数execute immediate p_SqlSelect into v_count;p_OutRecordCount := v_count;----执行分页查询v_heiRownum := p_PageNo * p_PageSize;v_lowRownum := v_heiRownum - p_PageSize + 1;v_sql := 'SELECT *            FROM (                  SELECT A.*, rownum rn                  FROM ('|| p_SqlSelect ||') A                  WHERE rownum <= '|| to_char(v_heiRownum) || '                 ) B            WHERE rn >= ' || to_char(v_lowRownum) ;            --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rnOPEN cur_OUT FOR v_sql;end KnowledgePagerCount;

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: