--调用函数封装业务逻辑
create or replace function getaddsalaryratio (p_job varchar2)
return number
as
v_result number(7,2);
begin
if p_job='clerk'
then --如果为职员,加薪10%
v_result :=0.10;
elsif p_job='salesman'
then --如果为销售职员,加薪12%
v_result:=0.12;
elsif p_job='manager'
then --如果为经理,加薪15%
v_result:=0.15;
end if;
return v_result;
end;
--调用函数简化程序代码
declare
v_job varchar(100); --定义员工职位变量
v_empno varchar(20); --定义员工编号变量
v_ename varchar(60); --定义员工名称变量
cursor c_emp
is
select job,empno,ename
from scott.emp
for update;
begin
open c_emp;
loop
fetch c_emp
into v_job,v_empno,v_ename; --提取游标数量
exit when c_emp%notfound; --如果无数据可提取,则退出游标
v_ratio:=getaddsalaryratio(v_job);--调用函数,得到加薪率
update scott.emp
set sal=sal*(1+v_ratio)
where current of c_emp;
--显示完成信息
dbms_output.put_line( '已经为员工'
||v_empno
||':'
||v_ename
||'成功加薪!'
);
end loop;
close c_emp; --关闭游标
exception
when othere
then --处理PL/SQL预定义异常
dbms_output.put_line('没有找到员工数据');
end;