`
fuqiangjava
  • 浏览: 12214 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oracle存储过程分页

阅读更多
存储过程 create or replace package pkg_query
as type
cur_query is ref cursor;
procedure proc_qurey
(
p_tableName in varchar2, --表名
p_strWhere in varchar2, --查询条件
p_orderColumn in varchar2, --排序的列
p_orderStyle in varchar2, --排序方式
p_curPage in out Number, --当前页
p_pageSize in out Number, --每页显示记录条数
p_totalRecords out Number, --总记录数
p_totalPages out Number, --总页数
v_cur out pkg_query.cur_query); --返回的结果集
end pkg_query;


create or replace package body pkg_query
is
create or replace
procedure proc_qurey
(
p_tableName in varchar2, --表名
p_strWhere in varchar2, --查询条件
p_orderColumn in varchar2, --排序的列
p_orderStyle in varchar2, --排序方式
p_curPage in out Number, --当前页
p_pageSize in out Number, --每页显示记录条数
p_totalRecords out Number, --总记录数
p_totalPages 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' || p_tableName || 'where 1=1';
if p_strWhere is not null or p_strWhere <> '' then
v_sql:=v_sql || ' and '|| p_strWhere;
end if;
execute immediate v_sql into p_totalRecords;

--验证页面记录大小
if p_pageSize<0 then
p_pageSize:=0;
end if;

--根据页大小计算总页数
if mod(p_totalRecords,p_pageSize) =0 then
p_totalPages := p_totalRecords /p_pageSize;
else
p_totalPages := p_totalRecords / p_pageSize + 1;
end if;

--验证页号
if p_curPage<1 then
p_curPage:=1;
end if;

if p_curPage > p_totalPages then
p_curPage:=p_totalPages;
end if;

--实现分页查询

v_startRecord:=(p_curPage-1)* p_pageSize+1;
v_endRecord :=p_curPage* p_pageSize;

v_sql := 'select * from (select a.*, rownum r from ' || '(select * from ' || p_tableName;

if p_strWhere is not null or p_strWhere <> '' then
v_sql := v_sql || ' where 1=1 and ' || p_strWhere;
end if;

if p_orderColumn IS NOT NULL or p_orderColumn <> '' then
v_sql := v_sql || ' order by ' || p_orderColumn || ' ' || p_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 proc_qurey;
end pkg_query;
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics