视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oralce写一个分页的存储过程
2020-11-09 11:01:25 责编:小采
文档


由于Oracle的存储过程没有返回值,它的所有返回值都是通过out参数来代替的,列表同样也不例外,但是由于是集合,所以不能用一般的

有返回值的存储过程(列表 结果集)
案例:编写一个过程,输入部门编号,返回该部门所有员工的信息。对该题的分析如下:
由于Oracle的存储过程没有返回值,它的所有返回值都是通过out参数来代替的,,列表同样也不例外,但是由于是集合,所以不能用一般的参数,必须要用package,所以分两部分:

1)建一个包。如下:

create or replace package testpackage AS TYPE test_cursor

is ref cursor;
end testpackage;

在该包中我定义了一个游标类型 test_cursor

下面就是写创建过程了
create or replace procedure chenchuang_pro
(chenNo in number p_cursor out testpackage.test_cursor) is
begin
open p_cursor for select * from emp wheredeptno-chenNo;
end;


---------------------------------------------------------
要求,编写一个存储过程,要求可以输入表名,每页显示记录数,当前页,返回总记录数,总页数,和返回结果集。(也就是写一个

分页的存储过程)

Oracle 的分页:
在分页的时候,把下面的sql语句当作模板使用

select * from (select t1.* , rownum rn from (select * from

emp)t1 where rn<=10) where rn>=6


--开始编写分页的过程


先写一个包
create or replace package testpackage AS TYPE test_cursor

is ref cursor;
end testpackage;

created or replace procedure fenye
(tableName in varchar2,
PageSize in number;--每页显示的数据量
PageNow in number;--当前的页码
myRows out number;--总记录数
myPageCount out number;--中页数
P_cursor out testpackage.test_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 rn<='||v_end||') where rn>='||v_begin;
--把游标和sql关联
open p_cursor for v_sql;
--计算MyRows 和MyJpageCount
--组织一个sql
v_sql:='select count(*) from '|| tableName
--执行sql,并把返回值 赋给MyRows
excute 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

下载本文
显示全文
专题