Oracle分页存储过程

来源:互联网 发布:淘宝投诉淘小二有用吗 编辑:程序博客网 时间:2024/06/15 19:41
第一步要先建立包
create or replace package pkg_query istype cur_query is ref cursor;procedure met_down_query(   m_tablename in varchar2,--表名   m_strwhere in varchar2,--查询条件   m_ordercolumn in varchar2,--排序字段   m_orderstyle in varchar2,--排序方式   m_currpage in out number,--当前页   m_pagesize in out number,--每页显示的记录数   m_totalrow out number,--总记录数   m_totalpage out number,--总页数   v_cur out cur_query --返回结果集);end pkg_query;

第二步写存储过程语句
create or replace procedure met_down_query(       m_tablename in varchar2,--表名       m_strwhere in varchar2,--查询条件       m_ordercolumn in varchar2,--排序字段       m_orderstyle in varchar2,--排序方式       m_currpage in out number,--当前页       m_pagesize in out number,--每页显示的记录数       m_totalrow out number,--总记录数       m_totalpage out number,--总页数       v_cur out pkg_query.cur_query --返回结果集)is v_sql varchar2(1000):=''; --sql语句 v_startrecord number(4);--开始记录数 v_endrecord number(4);--结束记录数begin  --总记录数  v_sql:='select to_number(count(*)) from '||m_tablename||' where 1=1';  if m_strwhere is not null or m_strwhere <>'' then    v_sql:=v_sql || m_strwhere;  end if;  execute immediate v_sql into m_totalrow;  --验证页面大小  if m_pagesize<0 then    m_pagesize:=0;  end if;  --根据页面大小计算总页数  if mod(m_totalrow,m_pagesize)=0 then    m_totalpage:=m_totalrow/m_pagesize;  else    m_totalpage:=m_totalrow/m_pagesize+1;  end if;  --验证页号  if m_currpage<1 then    m_currpage:=1;  end if;    if m_currpage>m_totalpage then    m_currpage:=m_totalpage;  end if;  --实现分页查询  v_startrecord:=(m_currpage-1)*m_pagesize+1;  v_endrecord:=m_currpage*m_pagesize;  v_sql:='select * from (select a.*,rownum r from '||         '(select * from '||m_tablename;     if m_strwhere is not null or m_strwhere <> '' then       v_sql:=v_sql || 'where 1=1 '||m_strwhere;     end if;     if m_ordercolumn is not null or m_ordercolumn <> '' then       v_sql:=v_sql || 'order by '||m_ordercolumn||''||m_orderstyle;     end if;     v_sql:=v_sql||')a where rownum<='||v_endrecord||')b where r>='                       ||v_startrecord; dbms_output.put_line(v_sql); open v_cur for v_sql; end met_down_query;
原创粉丝点击