pl/sql分页

原创
2018/10/19 15:03
阅读数 58

分页

建表
create table book (bookId number,bookName varchar2(50),publishHouse varchar2(50))

编写过程
--in:这是一个输入参数
--out:这是一个输出参数
create or replace procedure sp_book1(spBookId in number,spbookName in varchar2,
sppublishHouse in varchar2) is
begin
  insert into book values(spBookId,spbookName,sppublishHouse);
end;

有输入和输出的存储过程
create or replace procedure sp_book2
(spno in number,spName out varchar2) is
begin
  select ename into spName from emp where empno=spno;
end;

--返回结果集的过程
1.创建一个包,在该包中定义一个book_cursor,是一个游标
create or replace package bookpackage as
type book_cursor is ref cursor;
end bookpackage; 
2.创建过程
create or replace procedure sp_book3(spNo in number,p_cursor out bookpackage.book_cursor) is
begin
  open p_cursor for select * from emp where deptno=spNo;
end;

--oracle的分页
select t1.*,rownum rn from (select * from emp) t1;
select t1.*,rownum rn from (select * from emp) t1 where rownum<=10;

select * from 
(select t1.*,rownum rn from (select * from emp) t1 where rownum<=10)
where rn >= 6;

开始分页
create or replace procedure fenye
(
tableName in varchar2,
Pagesize in number,
pageNow in number,
myrows out number,--总记录
myPageCount out number,--总页数
p_cursor out bookpackage.book_cursor--返回的记录集
) is
--定义部分
--定义SQL语句 字符串
v_sql varchar2(1000);
v_begin number:=(pageNow-1)*Pagesize+1;
v_end number:=pageNow*Pagesize;
begin
  v_sql:='select * from (select t1.*,rownum rn from (select * from '||tableName||') t1 where rownum<='||v_end||')where rn >= '||v_begin||'';
--打开游标和SQL关联
open p_cursor for v_sql;  
--计算myrows和myPageCount
--组织一个sql
v_sql:='select count(*)from'||tableName;
--执行sql,并把返回值,赋给myrows;
execute immediate v_sql into myrows;
--计算myPageCount
if mod(myrows,Pagesize)=0 then
myPageCount:=myrows/Pagesize;
else
myPageCount:=myrows/Pagesize+1;
end if;
--关闭游标
close p_cursor;
end;
 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部