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

Desencadenadores de Oracle:problema con tablas mutantes

Como habrá notado, será difícil responder a los requisitos de su negocio con disparadores. La razón es que Oracle puede actualizar/insertar las tablas con más de un subproceso al mismo tiempo para una sola consulta (DML paralelo). Esto implica que su sesión no puede consultar la tabla que actualiza mientras se realiza la actualización .

Si realmente desea hacer esto con disparadores, deberá seguir el título tipo de lógica que se muestra en este artículo de Tom Kyte . Como puedes ver no es algo sencillo.

Hay otro método, más simple, más elegante y más fácil de mantener:los procedimientos de uso. Revoque el derecho de actualización/inserción al usuario(s) de la aplicación y escriba un conjunto de procedimientos que permitan a la aplicación actualizar las columnas de estado.

Estos procedimientos mantendrían un bloqueo en la fila principal (para evitar que varias sesiones modifiquen el mismo conjunto de filas) y aplicarían su lógica comercial de una manera eficiente, legible y fácil de mantener.