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;

 

转载于:https://www.cnblogs.com/mancomeon/p/5013496.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值