• Oracle 存储过程之通用分页查询


    在数据库中书写通用分页存储过程,有利于代码的维护以及执行效率的提升

    create or replace procedure Sp_QueryDatePage
    (
                  tableName in varchar2,--表名
                  fieldes  in  varchar2,---查询结果显示字段
                  wherecase in  varchar2,---查询条件
                  pageSize  in number, --页记录数
                  pageNow in number,--当前页
              orderField  varchar2,-排序字段,为空表示不排序
                  orderFlag  number,- 排序标识 0:正序 1: 倒序
                  myrows out number ,--总记录数
                  myPageCount out number ,---总分页
                  p_cursor out  SP_QueryDatePackage.SP_QueryDate_cursor ----返回记录数
    )    is
    
    v_sql varchar2(10000);
    
    --定义两个整数
    v_begin number:=(pageNow -1)* pageSize+1; --开始记录
    v_end   number:=pageNow* pageSize;       -- 结束记录
    
    --排序sql
    v_orderSql varchar2(100):='';
    v_wherecase varchar2(1000):='';
    
     begin
        -- 判定排序
        if orderFiled is not null  then 
             if orderFlag =0 then 
               v_orderSql:='ordey by'|| orderField'
             else if  orderFlag =1 then 
               v_orderSql:='ordey by'|| orderField||desc;
             else
                null;
             end if;
        end if;
     
       --条件语句
      if  v_wherecase is not null then
          v_wherecase :='where' || wherecase;
      end  if;
      v_sql:='select * from 
              (select t1.*,rownum rn from (select '||fields||'from'||tablename|| v_wherecase||''|| v_orderSql ||') t1 where rownum<='||v_end||') 
               where  rn >='|| v_begin
    --把游标和sql关联
    open p_curson  for v_spl;
    --计算myrow 和MypageCount
    
    v_sql :='select count(*) from '||tableName||v_wherecase||''||v_orderSql;
    
    execute immediate  v_sql  into myrows;
    
    -- 计算myPageCount (页数)
    if mod(myrows,Pagesize)=0 then
       myPageCount:=myrows/Pagesize;
    else 
      myPageCount:=myrows/Pagesize+1;
    
     end if;
  • 相关阅读:
    安装oh-my-zsh
    Ubuntu下安装2017版QQ
    Ubuntu安装Git
    链接libtorrent库时出现的问题
    ubuntu 下重装mysql若干问题
    最简单的epoll的使用范例 : 监听 标准输入 ,并将数据回显到终端
    [转]Linux下CodeBlocks的交叉编译
    各种免费素材下载站点
    Qt5:图片彩色键控,设置图片中指定颜色的像素为透明
    C++:预处理指令
  • 原文地址:https://www.cnblogs.com/mancomeon/p/5013496.html
Copyright © 2020-2023  润新知