n1ro°
RU

Ошибки · Решение

Oracle ORA-04091: table is mutating — trigger/function may not see it

Oracle запрещает такой доступ, потому что строковый trigger видит таблицу в промежуточном, логически нестабильном состоянии.

Редакция N1RO · Проверено

Короткий ответ

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 как альтернативу.

Безопасные шаги

  1. Перепишите trigger так, чтобы row section не читала mutating table.
  2. Перенесите общую обработку в after-statement часть либо используйте подходящую compound-trigger схему.
  3. Не обходите ошибку автономной транзакцией без понимания consistency.

Только безопасные обратимые действия. Опасные шаги — только по официальной инструкции и с пониманием рисков.

Когда нужен сервис

  • Если trigger является частью критичной бизнес-логики, изменение должно пройти тесты на multi-row DML и конкурентные транзакции.

Похожие ошибки

  • /errors/oracle-ora-00001/
  • /errors/oracle-ora-00054/
  • /errors/oracle-ora-00904/

Что учитывать

Точная причина зависит от версии ПО/прошивки, полного текста ошибки и контекста. Официальная инструкция имеет приоритет.

Официальный источник

Расшифровка сверена с официальными страницами поддержки из источников ниже. Редакция N1RO не диагностировала ваш конкретный случай.