PROCEDURE P_BONUS_DIFF
IS
cursor c_emp_sal is
SELECT emp_bonus.last_name, emp_bonus.salary
FROM emp_bonus
ORDER BY emp_bonus.salary DESC
for update of bonus;
v_old_name emp_bonus.last_name%TYPE;
v_new_name emp_bonus.last_name%TYPE;
v_new_salary emp_bonus.salary%TYPE;
v_old_salary emp_bonus.salary%TYPE;
v_diff number(30,2);
v_bonus number(30,2);
BEGIN
open c_emp_sal;
--fetch c_emp_sal into v_old_name, v_old_salary;
loop
fetch c_emp_sal into v_new_name, v_new_salary;
exit when c_emp_sal%notfound;
if v_new_salary != v_old_salary then
v_diff := 100-v_new_salary/v_old_salary*100;
end if;
v_bonus := 0.05;
if v_diff>10 then
v_bonus := 0.2;
end if;
dbms_output.put_line(v_new_name || ' hat ' ||
v_diff || '% von Bonus: ' ||
v_bonus);
update emp_bonus
set bonus = v_new_salary*v_bonus
where current of c_emp_sal;
v_old_name := v_new_name;
v_old_salary := v_new_salary;
-- exit when c_emp_sal%rowcount>5;
end loop;
close c_emp_sal;
END; -- Procedure