欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle数据库分页存储过程解读

程序员文章站 2022-10-31 15:21:37
oracle分页存储过程解读。 create or replace package fy_page is ? ? ?--声明游标 ? ?type cursor_page is ref cursor...
oracle分页存储过程解读。

create or replace package fy_page
is
? ? ?--声明游标
? ?type cursor_page is ref cursor;
end;

--分页存储过程
create or replace procedure proc_fy(
????p_tablename varchar2, ? ? ? ? --表名
????p_tablecolumn varchar2, ? ? ? --排序查询列
????p_order varchar2, ? ? ? ? ? ? --排序
????p_pagesize number, ? ? ? ? ? ?--每页大小
????p_curpage number, ? ? ? ? ? ? --当前页
????p_where varchar2, ? ? ? ? ? ? --查询条件
????p_rowcount out number, ? ? ? ?--总条数
????p_pagecount out number, ? ? ? --总页数
????p_cursor out fy_page.cursor_page) ? ? --结果集
is
????count_sql varchar2(2000);
????select_sql varchar2(2000);
????start_num number;
????end_num number;
begin
? --查询总条数
? count_sql :='select count(*) from '||p_tablename;
? if p_where is not null then
? ? count_sql := count_sql||' '||p_where;
? end if;
?
? --执行
? execute immediate count_sql into p_rowcount;

? --总页数
? if mod(p_rowcount,p_pagesize)=0 then
? ? p_pagecount := p_rowcount/p_pagesize;

? else
? ? p_pagecount := p_rowcount/p_pagesize+1;

? end if;

? --当前页起始编号
? start_num:=(p_curpage-1)*p_pagesize+1;
? --当前页结束编号
? end_num:=p_curpage*p_pagesize;
? --结果集
? select_sql := 'select * from (select '||p_tablename||'.*,row_number() over(order by '||p_tablecolumn||
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' '||p_order||') aid from '||p_tablename||' '||p_where||') a where aid between ???????????????????????????'||start_num||' and '||end_num;
? open p_cursor for select_sql;

end proc_fy;