oracle 动态分页,oracle动态分页函数

create or replace procedure sp_exec_dynamic_page( /*    功能:实现动态分页 */   var_tablename   in VARCHAR2,    -- 表名 employees e,departments d   var_tablecolumn in VARCHAR2,    -- 查询列 a.employee_id,b.department_name   var_where       in VARCHAR2,    -- 查询条件 b.department_name like 'S%'   var_ordercolumn in VARCHAR2,    -- 排序 b.department_name desc   var_pagesize    in NUMBER,      -- 每页大小 10   var_curpage     in NUMBER,      -- 当前页 1   var_rowcount    OUT NUMBER,     -- 返回总条数   --var_pagecount   OUT NUMBER,     -- 返回总页数   var_cursor      OUT sys_refcursor -- 返回分页结果集 ) is   v_tablecolumn varchar2(10);   v_where varchar2(200);   v_ordercolumn varchar2(200);   v_sql varchar2(2000);   v_count varchar2(2000);   v_pagesize integer;   v_total_page integer;   --v_total_count number(10);   v_curpage integer;   v_start_record integer;   v_end_record integer;   v_count_sql varchar2(2000); begin   --必须输入表名,否则会报错   if trim(var_tablename) is null then     raise_application_error(-20001,'必须输入表明才能进行分页!');   end if;     --输入列名,列名必须以‘,’隔开,如果不输入则默认为全部列   if trim(var_tablecolumn) is not null then     v_tablecolumn:=var_tablecolumn;   else     v_tablecolumn:='*';   end if;   --判断是否存在where条件   if trim(var_where) is not null then     v_where:=' where 1=1 and '||var_where;   else     v_where:=' where 1=1';   end if;      --判断是否有order 不要条件   if trim(var_ordercolumn) is not null then     v_ordercolumn:=var_ordercolumn;   else     v_ordercolumn:='';     end if;   --查询总共的记录条数   v_count:='SELECT COUNT(*) FROM '||var_tablename ||v_where;      execute immediate v_count into var_rowcount;   --判断是否输入了每页显示的条数   if var_pagesize is not null then     v_pagesize:=var_pagesize;   else      v_pagesize:=10;     end if;   --得到总的页数   if mod(var_rowcount,v_pagesize)=0 then     v_total_page:=var_rowcount/v_pagesize;   else     v_total_page:=floor(var_rowcount/v_pagesize)+1;   end if;   --如果输入的当前页大于总的页,则取最后一页   if var_curpage>v_total_page then     v_curpage:=v_total_page;   else     v_curpage:=var_curpage;   end if;     --开始的记录条数   v_start_record:=(v_curpage-1)*v_pagesize+1; --结束的记录条数   v_end_record:=v_curpage*v_pagesize;   --拼接分页的sql语句   v_count_sql:='(select '|| v_tablecolumn ||' from '|| var_tablename || v_where || v_ordercolumn||') e';   v_sql:='select * from ('||'select rownum rn, e.* from '|| v_count_sql              ||' where rownum<='|| v_end_record ||') p where p.rn>='||v_start_record;   --将查询的结果放入游标中              open var_cursor for v_sql;    end sp_exec_dynamic_page; /

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值