过程,函数和包都属于PL/SQL语句块中的命名块。
过程和函数最大的不同之处在于函数有返回值,过程没有。
下面用一个实例来说明三者之间的关系:
--包规范定义
create or replace package empsalary
as
procedure addempsalary (p_ratio number,p_empno number);
function getaddsalaryratio(p_job varchar2);
function getaddsalaryratiocase (p_job varchar2);
end empsalary;
--包体定义
create or replace package body empsalary
as
procedure addempsalary(p_ratio number,p_empno number);
as
begin
if p_ratio > 0
then
update scott.emp set sal = sal * (1 + p_ratio) where empno = p_empno;
end if;
dbms_output.put_line('加薪成功!');
end;
/*加薪函数*/
function getaddsalaryratio (p_job varchar2)
return number
as
v_result number(7,2)
begin
if p_job = 'clerk'
then
v_result := 0.10;
elsif p_job = 'salesman'
then
v_result := 0.12;
elsif p_job = 'manager'
then
v_result := 0.15;
end if;
return v_result;
end;
--使用case-when
function getaddsalaryratiocase(p_job varchar2)
as
begin
case p_job
when 'clerk'
then v_result := 0.10;
when 'salesman'
then v_result := 0.12;
when 'manager'
then v_result := 0.15;
end case;
end;
end empsalary;/