Ваша фактическая ошибка вызвана неверным синтаксисом.В PL / SQL это ELSIF
, а не ELSEIF
, хотя, поскольку вы не реализуете разветвленный коммутатор, вам просто нужно ELSE
.Также END IF
- это два слова.Кроме того, это dbms_output.put_line()
не putline
.
Если вы исправите все эти ошибки, вы запустите рутину.
Однако, sql%found
сообщает нам, попадал ли наш DML в какие-либо записи, но не сообщает нам, сколько записей.Так что affected_emp
будет нулевым в вашем коде.
Самый простой способ узнать количество затронутых записей - это sql%rowcount
, который дает нам количество записей, вставленных, обновленных или удаленных предыдущим оператором DML.Ноль означает, что записи не были изменены.
Очевидно, вы можете просто вывести эту цифру, но вот как она выглядит в вашем коде:
DECLARE
affected_emp NUMBER(2);
BEGIN
UPDATE cursor_example
SET emp_salary = emp_salary + (.25*emp_salary);
affected_emp := sql%rowcount;
IF affected_emp = 0 THEN
DBMS_OUTPUT.PUT_LINE('NO PEOPLE AFFECTED');
ELSE
DBMS_OUTPUT.PUT_LINE(affected_emp || ' PEOPLE AFFECTED');
END IF;
END;