包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。
①使用create package语句来编写包的规范。
--包的规范
create package sp_package is
procedure update_sal(name varchar2,newSal number);
function annual_income(name varchar2) return number;
end;
可以看到上面的这个例子是包规范,它声明了一个存储过程和一个函数。
包的规范并没有对过程和函数作具体的实现。
②由于包的规范并没有存储过程和函数的具体实现,所以需要创建包体来实现过程和函数
使用create package body来创建包体
--创建包体
create package body sp_package is
--存储过程
procedure update_sal(name varchar2,newSal number)
is
begin
update emp set sal=newSal where ename=name;
end;
--函数
function annual_income(name varchar2)
return number is
annual_salary number;
begin
select sal*12+nvl(comm,0) into annual_salary from emp
where ename=name;
return annual_salary;
end;
end;
注意:在调用包中的过程和函数时,需要带上包的名字在函数名之前,包名和函数名之间用英文实心点。
--调用存储过程
exec sp_package.update_sal('SCOTT',120);