Oracle
 sql >> Base de données >  >> RDS >> Oracle

Condition de déclenchement dans toutes les lignes

Un déclencheur qui émet DML (y compris SELECT) sur la même table qui possède le déclencheur soulève le spectre d'ORA-4091, l'exception de table en mutation. Oracle lance cette erreur car il s'attend à ce que le résultat d'une transaction soit déterministe, et un déclencheur qui émet DML sur sa propre table introduit une incertitude dans la procédure.

La table de mutation est un indicateur fiable d'une mauvaise conception, en particulier d'un mauvais modèle de données et cela semble être le cas ici.

Si la valeur d'une amende dépend du résultat d'une seule observation, il est normal que FINE soit une colonne de la table OBSERVACION. Cependant, vos règles métier indiquent que la valeur peut dépendre de plusieurs observations, si elles se situent dans une certaine période. Dans ce scénario, l'amende devrait figurer dans un tableau à part entière. Vous auriez besoin d'une clé étrangère entre OBSERVACION et MULTA pour indiquer quelles observations sont couvertes par une amende particulière.