Ошибки · Решение
Oracle ORA-04091: table is mutating — trigger/function may not see it
Oracle запрещает такой доступ, потому что строковый trigger видит таблицу в промежуточном, логически нестабильном состоянии.
Короткий ответ
ORA-04091 означает, что row-level trigger или вызываемая функция пытается читать/изменять таблицу, которая прямо сейчас меняется вызвавшим statement.
Что означает ошибка
Oracle запрещает такой доступ, потому что строковый trigger видит таблицу в промежуточном, логически нестабильном состоянии.
Возможные причины
- Row trigger делает SELECT из той же таблицы.
- PL/SQL функция, вызванная из DML/trigger, обращается обратно к изменяемой таблице.
- Логика пытается вычислить aggregate по таблице до завершения statement.
Что проверить
- Найдите trigger/function в stack ORA и проверьте обращения к mutating table.
- Определите, нужен ли расчёт на уровне строки или после завершения всего statement.
- Проверьте compound trigger/statement-level design как альтернативу.
Безопасные шаги
- Перепишите trigger так, чтобы row section не читала mutating table.
- Перенесите общую обработку в after-statement часть либо используйте подходящую compound-trigger схему.
- Не обходите ошибку автономной транзакцией без понимания consistency.
Только безопасные обратимые действия. Опасные шаги — только по официальной инструкции и с пониманием рисков.
Когда нужен сервис
- Если trigger является частью критичной бизнес-логики, изменение должно пройти тесты на multi-row DML и конкурентные транзакции.
Похожие ошибки
- /errors/oracle-ora-00001/
- /errors/oracle-ora-00054/
- /errors/oracle-ora-00904/
Что учитывать
Точная причина зависит от версии ПО/прошивки, полного текста ошибки и контекста. Официальная инструкция имеет приоритет.
Официальный источник
Расшифровка сверена с официальными страницами поддержки из источников ниже. Редакция N1RO не диагностировала ваш конкретный случай.