您的位置:首页 > 数据库 > Oracle

Oracle分页存储过程

2017-08-28 11:38 239 查看
第一步要先建立包

create or replace package pkg_query is
type 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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: