Как отобразить имя и фамилию сотрудника с обновленной зарплатой? - PullRequest
0 голосов
/ 13 февраля 2020

SQL Разработчик отображает ошибку о мутации.
Не могли бы вы дать совет, как с этим бороться?
Я вошел как пользователь hr на Oracle 11g.

create or replace trigger displayEmp
before update ON employees
for each row
declare
    v_name varchar;
    v_surname employees.last_name%type;
    newSal employees.salary%type;
begin
    newSal := :new.salary;
    select first_name, last_name into v_name, v_surname 
    from employees where salary = newSal;
    dbms_output.put_line(v_name || ' ' || v_surname);
end;

1 Ответ

1 голос
/ 14 февраля 2020

Назначение вашего триггера не имеет большого смысла, поскольку он выводит только некоторую производную информацию на стандартный вывод.

Однако вы, кажется, слишком усложняете это. Чтобы получить доступ к имени сотрудника, вам не нужно запрашивать таблицу: эта информация доступна в псевдокорде :new. Это значительно упрощает ваш код:

create or replace trigger displayEmp
before update of salary on employees
for each row
begin
    dbms_output.put_line(:new.first_name, || ' ' || :new.last_name);
end;

Обратите внимание, что я изменил триггер, поэтому он срабатывает только при обновлении salary: before update of salary on employees.

...