Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101392111
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-30 16:12:41

 

程序包是一种数据对象,它是对相关pl/sql类型,子程序,游标,异常,变量和常量的封装.它包含两部内容:程序包规范和程序包主体.在程序包规范中,可以声明类型,变量,常量,异常,游标和子程序.程序包主体用于实现包规范中定义的内容.OK,一起来看看代码.
--包规范(类似接口)
create or replace package pack1 is
procedure updatesal(dno number);--过程

function selectename(eno number) return varchar2;--函数
end pack2;
--包主体(类似接口的实现)
create or replace package body pack1 is
procedure updatesal(dno number)
is
begin
--每个员工加资金1000,如果工资+资金少于2000的则再继续加奖金500
update emp set comm=case
when nvl(comm,0)+sal<2000 then nvl(comm,0)+1500
else nvl(comm,0)+1000
end
  where deptno=dno;
end;
--根据编号查找员工
function selectename(eno number) return varchar2 is
e_ename varchar2(20);
begin
select ename into e_ename from emp where empno=eno;
return e_ename;
end;
end pack2;

--调用
declare
dno number;
eno number;
e_name varchar2(20);
begin
dno:=&请输入部门编号;
eno:=&请输入员工编号;
pack1.updatesal(dno);
e_name:=pack1.selectename(eno);
dbms_output.put_line(e_name);
end;


OK,在来看看程序包中的游标.看代码咯.

--创建包规范
create or replace package pack2 is
cursor c_cur(eno number) return emp%rowtype;--游标
procedure e_pro(eno number);--过程
end pack3;

--创建包主体
create or replace package body pack2 is
cursor c_cur(eno number) return emp%rowtype is
select *from emp where deptno=eno;
procedure e_pro(eno number) is
rec emp%rowtype;
begin
open c_cur(eno);
    loop
    fetch c_cur into rec;
    exit when c_cur%notfound;
    dbms_output.put_line(rec.ename);
    end loop;
close c_cur;
end e_pro;
end pack2;
--调用
declare
e_no number;
begin
e_no:=&abc;
pack2.e_pro(e_no);
end;

说明:
游标的定义也是分为两部分:游标规范和游标主体.在包规范中声明游标规范时必须通过return子句指定游标的返回类型.return子句可以由以下两个数据类型结构中的任一组成.
1.使用%rowtype属性根据数据库表定义的记录.
2.根据程序员定义的记录类型的记录.

 

原文:http://hujing1229.blog.ccidnet.com/blog-htm-do-showone-uid-60604-type-blog-itemid-186918.html

阅读(186) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~