zoukankan      html  css  js  c++  java
  • Oracle分页

    create or replace package datapagination is

      -- Author  : 张林春
      -- Created : 2008-12-30 14:53:24
      -- Purpose : 大数据量分页
     
      -- Public type declarations
      type M_Cursor is ref cursor;
     
      -- Public function and procedure declarations
      procedure pagination(
           myCursor out M_Cursor,
           tblName in varchar, -- 表名
           strGetFields in varchar := '*', -- 需要返回的列
           fldName in varchar:='', -- 排序的字段名
           PageSize in int , -- 页尺寸
           PageIndex in int, -- 页码
           doCount in int , -- 返回记录总数, 非 0 值则返回
           OrderType in int , -- 设置排序类型, 非 0 值则降序
           strWhere in varchar:=null -- 查询条件 (注意: 不要加 where)
           --mresult out varchar
      );
    end datapagination;

    -------------------------------------------------------

    create or replace package body datapagination
    is
     procedure pagination
     (
           myCursor out M_Cursor,
           tblName in varchar, -- 表名
           strGetFields in varchar := '*', -- 需要返回的列
           fldName in varchar:='', -- 排序的字段名
           PageSize in int , -- 页尺寸
           PageIndex in int, -- 页码
           doCount in int , -- 返回记录总数, 非 0 值则返回
           OrderType in int , -- 设置排序类型, 非 0 值则降序
           strWhere in varchar:=null -- 查询条件 (注意: 不要加 where)
         --  mresult out varchar
     )
     is
       v_sql varchar2(1000);--主语句
       v_strTmp varchar2(110) ;-- 临时变量
       v_strOrder varchar2(400);-- 排序类型
     begin
       if doCount!=0 then
          if strWhere is null then
             v_sql:='select count(*) as Total from '||tblName ;
          else
             v_sql:='select count(*) as Total from '||tblName||' where '+strWhere ;
          end if;
       else
          --如果OrderType不是0,就执行降序,这句很重要!
          if OrderType!=0 then
              v_strTmp:='<(select min';
              v_strOrder:=' order by '||fldName||' desc';
          else
              v_strTmp:='<(select max';
              v_strOrder:=' order by '||fldName||' asc';
          end if;
          --如果是第一页就执行以下代码,这样会加快执行速度
          if PageIndex=1 then
               if strWhere is null then
                  v_sql:='select top '||PageSize||' '||strGetFields||' from '||tblName||' where '||strWhere||' '||v_strOrder;
               else
                  v_sql:='select top'||PageSize||' '||strGetFields||' from '||tblName||v_strOrder;
               end if;  
          else
           --以下代码赋予了v_sql以真正执行的SQL代码
           v_sql:='select '||strGetFields||' from '||tblName||' where '||fldName||v_strTmp||'('||fldName||') '||
                  'from (
                         select '||fldName||
                         ' from '||tblName||
                         ' where rownum<='||(PageIndex-1)*pagesize||
                         v_strOrder||
                       ' )  tblTmp) and rownum<='||pagesize||v_strOrder;
           if strWhere is not null then
                     v_sql:='select '||strGetFields||' from '||tblName||' where '||fldName||v_strTmp||'('||fldName||') '||
                  'from (
                         select '||fldName||
                         ' from '||tblName||
                         ' where '||strWhere||' and rownum<='||(PageIndex-1)*pagesize||
                         v_strOrder||
                       ' )  tblTmp) and '||strWhere||' and rownum<='||pagesize||v_strOrder;
           end if;
             
          end if;
       end if;
    /*     v_sql := 'select count(*) from (' || Psqlcount || ')';
          execute immediate v_sql into v_prcount;*/
      open myCursor for v_sql;
      --mresult:=v_sql;
      end pagination;
    end datapagination;

    --------------------------------------------------------


     

  • 相关阅读:
    Yii2 简单DateTimePicker
    Yii2简单的 yii2-phpexcel导出
    Yii2.0 是如何引入js和css
    Yii2.0 behaviors方法使用
    Yii2.0 Activeform表单部分组件使用方法
    Yii Url重新
    Yii CModel中rules验证规则
    Yii 1.0 伪静态即Yii配置Url重写(转)
    Yii main配置文件解析
    Yii框架 phpexcel 导出
  • 原文地址:https://www.cnblogs.com/yidianfeng/p/1365492.html
Copyright © 2011-2022 走看看