Почему «ошибка изменяющейся таблицы» является временем выполнения? - PullRequest
0 голосов
/ 06 июля 2018

Недавно в одном из интервью меня спросили, что такое «ошибка таблицы мутаций». Я сказал, что это происходит, когда триггер уровня строки имеет dml-запрос к той же таблице. Затем интервьюер спросил, так ли это, тогда должна быть ошибка времени, поскольку компилятор знает, что у триггера есть запрос dml к той же таблице.

1 Ответ

0 голосов
/ 06 июля 2018

По той простой причине, что триггер содержит любую логику, которую вы хотите иметь в нем.

Например, если триггер имел:

if :new.start_date > sysdate + 1 then
  select ... [my bad dml that would cause a mutating table error]
end if;

тогда он не должен компилироваться? Насколько нам известно, условие IF никогда не может быть оценено как истинное, и этот нарушающий DML никогда не будет запущен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...