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;