包与包体

一、概念
包类似于java中的接口,包中的过程与函数是只有名字没有sql块(代码)。要通包体来实现包中的过程与函数。

作用:
1.将有联系的对象打成包,方便使用  
•  1 包说明和包体必须有相同的名字  
•  2 包的开始没有begin语句,与存储过程和函数不同。  
•  3 在包的说明部分定义函数和过程的名称和参数,具体实现在包体中定义。  
•  4 在包内声明常量、变量、类型定义、异常、及游标时不使用declare。  
•  5 包内的过程和函数的定义不要create or replace语句。  
•  6 包声明和包体两者分离。

二、创建包的语法

Create[ or replace] package  包名

IS

Procedure过程名[(参数.....)];

Function函数名[(参数.....)]

Return数据类型;

End;

/

2.案例
请编写一个包,
该包中有一个过程:可以接收用户名和薪水,(将用于通过用户名去更新薪水)
还有一个函数,该函数可以接收下个用户名,(将用来实现 得到该用户的年薪是多少)

create package my_pac
is
procedure my_pro(v_name varchar2,v_sal number);
function my_fun(v_name varchar2)
return number;
end;
/

三、创建包体
语法:
1.注意:包体的名字,一定要与上面创建的包名一样。
Create[ or replace] package body 包名
Is
Procedure 过程名[(参数.....)]
Is
Begin
执行语句;
End;
Function 函数名[(参数.....)]
Return 数据类型 
Is
定义变量;
Begin
执行语句;
End;
End;
/


--创建包体
代码:
create or replace package body my_pac  --创建包体名
is
procedure my_pro(v_ename varchar2,v_sal number) --覆写包的过程
is                                    --一些是实现过程的方法
begin
update emp set sal=v_sal where ename=v_ename;
end;--结束
function my_fun(v_ename varchar2)--覆写包的函数
return number
is                                --以下是实现函数的过程
v_sal emp.sal%type;
begin
select (sal + nvl(comm,0))*12 into v_sal from emp where ename=v_ename;
return v_sal;
end;--结束
end;
/

调用包体语法

Exec 包名.过程名(参数....);

Call 包名.过程名(参数....)
调用函数语法:
Select 包名.函数名 from dual;





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值