sql >> Base de Datos >  >> RDS >> Oracle

ORACLE Después del activador de actualización:resolviendo el error de la tabla de mutación ORA-04091

"¿Hay alguna forma de evitar el error de tabla mutante sin usar una tabla temporal para valores o una transacción autónoma?"

tl;dr no.

El error de la tabla mutante se produce al consultar la tabla propietaria del activador o las tablas que están involucradas en una relación de clave externa con la tabla propietaria (al menos en versiones anteriores de la base de datos, no estoy seguro de si todavía se obtiene).

En una aplicación diseñada correctamente, esto no debería ser necesario. Esta es la razón por la que muchas personas consideran que las tablas mutantes son un indicador de un modelado de datos deficiente. Por ejemplo, la mutación a menudo se asocia con una normalización insuficiente.

Parafraseando a Jamie Zawinski:algunas personas, cuando se enfrentan a una excepción de tabla mutante, piensan "Lo sé, usaré transacciones autónomas". Ahora ellos tienen dos problemas.

A veces, el error se puede evitar simplemente modificando los valores :NUEVO en un disparador ANTES DE INSERTAR O ACTUALIZAR o usando columnas virtuales. Pero deberá publicar más detalles para ver si se aplican.

Pero la mejor solución es no necesitar ningún otro tipo.