包头包体oracle,包头(Package)与包体(Package body)的学习与应用

包由包规范和包体两部分组成。

特点:

1.将有联系的对象打成包,方便使用;

2.包中对象包括储存过程、函数、游标、自定义类型和变量,可以在PL_SQL块中应用这些对象。

定义包头:

----------------------------------------------------------------------------------------------

create_package ::=

c26dc44c629f586745aaaa1977506973.gif

----------------------------------------------------------------------------------------------

定义包体:

----------------------------------------------------------------------------------------------

create_package_body ::=

943038c339b89ae70451cc500b5d2539.gif

----------------------------------------------------------------------------------------------

只有当包头编辑成功后才能编辑包体,其中的函数名与过程名须和包头中的函数过程一样。

包应用的一个例子:

包的作用: 根据出生年月返回年龄function Getage,返回工资function Getsalary

--创建环境

Create Table T_PsnSalary  --工资表

(

Fpsncode varchar(4) default '',  --个人代码

Fpsndesc varchar(20) default '',  --描述

FpsnBirth varchar(20) default '', --生日

FpsnSalary number(8,2)            --工资

);

--添加数据

Insert into T_PsnSalary(Fpsncode,Fpsndesc,FpsnBirth,FpsnSalary) Values('C001','张三','1986.01.10',1100);

Insert into T_PsnSalary(Fpsncode,Fpsndesc,FpsnBirth,FpsnSalary) Values('C002','李四','1980.10.10',3000);

Insert into T_PsnSalary(Fpsncode,Fpsndesc,FpsnBirth,FpsnSalary) Values('C003','王五','1996.12.10',800);

commit;

--创建包头

create or replace package A_GetData is

function Getage(birthst varchar,birthend varchar) return integer;

function Getsalary(VFpsncode varchar) return number;

end A_Getdata;

--创建包体

create or replace package body A_GETDATA is

function Getage(birthst varchar,birthend varchar) return integer --得到年龄函数

is

V_birth integer;

ToDateEnd Date;

Toyear number(4);

Tomonth number(4);

Fromyear number(4);

Frommonth number(4);

begin

if (birthend='') or (birthend is null) then

select sysdate into ToDateEnd from dual; --得到系统时间

end if;

Toyear := to_number(to_char(ToDateEnd,'YYYY')); --得到最后年月

Tomonth := to_number(to_char(ToDateEnd,'MM'));

Fromyear := to_number(substr(birthst,1,4));--计算的年月

Frommonth := to_number(substr(birthst,6,2));

if Tomonth-Frommonth>0 then V_birth:=Toyear-fromyear;

else V_birth:=Toyear-fromyear-1;

end if;

return(V_birth);

end Getage;

function getSalary(VFpsncode varchar) return number--返回工资情况

is

V_psnSalary number(8,2);

begin

Select FpsnSalary into V_psnSalary from T_PsnSalary  where Fpsncode=VFpsncode;

return(V_psnSalary);

end getSalary;

end A_GETDATA;

--测试

select a.*,A_getdata.Getage(Fpsnbirth,'')age from T_psnsalary a;  --调用包得到年龄功能

select A_getdata.Getsalary('C001') from dual;                     --代码得到工资

参考:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值