zoukankan      html  css  js  c++  java
  • Oracle大数据量分页通用存储过程

    /*根据网友资料修改的,见笑了*/

    type refCursorType is REF CURSOR;  --游标类型定义,用于返回数据集

    /*****************************************************************
     *功能描述: 大数据量分页通用存储过程
     *创 建 人: 夏春涛 
    xchuntao@163.com qq:23106676
     *创建时间: 2005-06-29
     *****************************************************************/

    procedure sp_Page(p_PageSize int,          --每页记录数
                      p_PageNo int,            --当前页码,从 1 开始
                      p_SqlSelect varchar2,    --查询语句,含排序部分
                      p_OutRecordCount out int,--返回总记录数
                      p_OutCursor out refCursorType)
    as
        v_sql varchar2(3000);
        v_count int;
        v_heiRownum int;
        v_lowRownum int;
    begin
      ----取记录总数
      v_sql := 'select count(*) from (' || p_SqlSelect || ')';
      execute immediate v_sql 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,第二次一定要用别名rn
     
      OPEN p_OutCursor FOR  v_sql;

    end sp_Page;

    /*****************************************************************
     *功能描述: 大数据量分页通用存储过程(重载1,推荐使用)
     *创 建 人: 夏春涛
     *创建时间: 2005-07-01
     *****************************************************************/

    procedure sp_Page(p_PageSize int,          --每页记录数
                      p_PageNo int,            --当前页码,从 1 开始
                      p_SqlSelect varchar2,    --查询语句,含排序部分
                      p_SqlCount varchar2,     --获取记录总数的查询语句
                      p_OutRecordCount out int,--返回总记录数
                      p_OutCursor out refCursorType)
    as
        v_sql varchar2(3000);
        v_count int;
        v_heiRownum int;
        v_lowRownum int;
    begin
      ----取记录总数
      execute immediate p_SqlCount 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,第二次一定要用别名rn
     
      OPEN p_OutCursor FOR  v_sql;

    end sp_Page;

    /*****************************************************************
     *功能描述: 大数据量分页通用存储过程(重载2)
     *创 建 人: 夏春涛
     *创建时间: 2005-07-01
     *****************************************************************/

    procedure sp_Page(p_PageSize int,        --每页记录数
                      p_PageNo int,          --当前页码,从 1 开始
                      p_SqlSelect varchar2,  --查询语句,含排序部分
                      p_OutCursor out refCursorType)
    as
        v_sql varchar2(3000);
        --v_count int;
        v_heiRownum int;
        v_lowRownum int;
    begin
    /*
      ----取记录总数
      v_sql := 'select count(*) from (' || p_SqlSelect || ')';
      execute immediate v_sql 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,第二次一定要用别名rn
     
      OPEN p_OutCursor FOR  v_sql;

    end sp_Page;

  • 相关阅读:
    近期前端中的 一些常见的面试题
    一道前端学习题
    前端程序员容易忽视的一些基础知识
    web前端工程师入门须知
    Web前端知识体系精简
    面试分享:一年经验初探阿里巴巴前端社招
    抽象类、抽象函数/抽象方法详解
    C#语法-虚方法详解 Virtual 虚函数
    面向对象语言:继承关系教程
    C#动态创建Xml-LinQ方式
  • 原文地址:https://www.cnblogs.com/SummerRain/p/214073.html
Copyright © 2011-2022 走看看