PROCEDURE P_CURS_BONUS_ERWEITERT IS v_old_name xl_emp_bonus.last_name%type; v_new_name xl_emp_bonus.last_name%type; v_old_salary xl_emp_bonus.salary%type; v_new_salary xl_emp_bonus.salary%type; v_differenz number(30); v_bonus number(30,2); rec_bonus xl_emp_bonus%ROWTYPE; CURSOR curs_bonus IS SELECT xl_emp_bonus.last_name, xl_emp_bonus.salary FROM xl_emp_bonus ORDER BY xl_emp_bonus.salary DESC for update of bonus; BEGIN OPEN curs_bonus; --FETCH curs_bonus INTO v_old_name, v_old_salary; LOOP FETCH curs_bonus INTO v_new_name, v_new_salary; exit when curs_bonus%NOTFOUND; if v_new_salary != v_old_salary then v_differenz := 100-v_new_salary/v_old_salary*100; end if; v_bonus := 0.05; IF v_differenz > 10 THEN v_bonus := 0.20; END IF; UPDATE xl_emp_bonus SET bonus_dynamisch = v_new_salary * v_bonus WHERE CURRENT OF curs_bonus; v_old_name := v_new_name; v_old_salary := v_new_salary; --exit when curs_bonus%ROWCOUNT>5; END LOOP; CLOSE curs_bonus; END;