set serveroutput on
--包由包规范和包体两部分组成
--包规范里面定义的对象是全局的
--包体里面定义的对象是局部的
--定义包规范
create or replace package emp_package is --使用了重载,两个过程名相同,参数不同
procedure get_sal(v_empno in number); --全局过程
procedure get_sal(v_ename in varchar2); --全局过程
end emp_package;
/
--定义包体
create or replace package body emp_packageis function count_sal(v_empno in number) --局部函数
return number is v_sal emp.sal%type;
begin
select emp.sal into v_sal from emp where emp.empno=v_empno;
return v_sal;
end;
procedure get_sal(v_empno in number) --全局过程
is v_sal emp.sal%type;
begin
v_sal:=count_sal(v_empno); --调用局部函数
dbms_output.put_line('工资='||v_sal);
end;
procedure get_sal(v_ename in varchar2) --全局过程
is v_sal emp.sal%type;
begin
select emp.sal into v_sal from emp where emp.ename=v_ename;
dbms_output.put_line('工资='||v_sal);
end;
end emp_package;
/
--调用包
exec emp_package.get_sal(7788);
exec emp_package.get_sal('KING');
--当使用包全局函数的时候,可以在sql中调用
--那么全局函数有以下限制
--包的纯度级别:
--wnds 禁止执行dml操作
--wnps 不能给包变量赋值
--rnds 禁止执行dql操作
--rnps 不能将包变量值赋给其他变量
create or replace package emp_package
is
function get_sal return number;
pragma restrict_references(get_sal,wnds);
end;
/
PL/SQL 11g R2 —— 包
最新推荐文章于 2024-06-03 09:06:41 发布