pl/sql分页

Oracle PL/SQL 存储过程详解
本文详细介绍了在Oracle数据库中使用PL/SQL创建和使用存储过程的方法,包括无输入输出参数、有输入输出参数及返回结果集的存储过程示例。此外,还深入探讨了如何实现分页查询,通过具体的SQL语句和过程代码,为读者提供了实用的数据库编程技巧。

分页

建表
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;
 

转载于:https://my.oschina.net/869088067/blog/2249421

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值