Это нормальное поведение. Oracle защищает вас от противоречивых данных, которые вы можете получить при доступе к таблице, которая уже обновляется.
Представьте себе этот сценарий.
Вы отправляете два оператора обновления и имеете триггер, который выбирает из этой же таблицы. Предположим, что первое утверждение успешно применено, а данные изменены. Теперь пришло время для второго заявления. Какой вывод вы ожидаете от оператора выбора в триггере? Должен ли он возвращать данные, которые были до первого обновления, или он должен включать внесенные изменения? Вы, вероятно, думаете, что Oracle должен вернуть новые данные. Но, во-первых, Oracle на самом деле не знает ваших намерений, а во-вторых, это будет означать, что ваш запрос зависит от порядка строк, что противоречит реляционной алгебре.
Решение вашей проблемы довольно простое. Вам вообще не нужен столбец SUPERVISOR_NAME
. Чтобы получить имя супервизора, просто объедините таблицу с самим собой и получите желаемый результат, например:
select t1.ID, t1.SUPERVISOR_ID, t2.NAME from FAKE_EMPLOYEE t1
left join FAKE_EMPLOYEE t2 on t1.SUPERVISOR_ID = t2.ID;