package
将功能相近的函数和存储过程组织在一起
便于管理
包内函数可以重名,以提高程序的通用性
减少对象的名称占用问题
一个包内的函数被使用,整个包的定义都会被读入内存中
包内任何一个成员失效,整个包都需要重新编译
包,由包头和包体构成
包头
描述函数、存储所使用参数
可以独立存在
包体
函数和存储过程具体实现(PLSQL代码块)
不能独立存在
建立包头
create or replace package pkgoaec
is
function f1(no number) return number;
function f1(no emp.ename%type) return number;
procedure p1(v_no number);
end pkgoaec;
建立包体
create or replace package body pkgoaec
is
function f1
(no in number)
return number
is
v_sal emp.sal%type :=0;
begin
select sal into v_sal from e where empno=no;
return v_sal;
end f1;
function f1
(no in emp.ename%type)
return number
is
v_sal emp.sal%type :=0;
begin
select sal into v_sal from e where ename=no;
return v_sal;
end f1;
procedure p1
(v_no in number)
is
begin
update e set sal=sal+1 where empno=v_no;
commit;
end p1;
end pkgoaec;
验证和管理包
select text from user_source where name='PKGOAEC';
desc pkgoaec
包内函数的调用
select pkgoaec.f1(7900),pkgoaec.f1('KING') from dual;
在代码块中调用自定义的包
declare
v1 emp.sal%type;
v2 emp.sal%type;
begin
v1:=pkgoaec.f1(7900);
v2:=pkgoaec.f1('KING');
pkgoaec.p1(7900);
dbms_output.put_line(v1||' '||v2);
end;
/
删除包
drop package pkgoaec;