Oracle
 sql >> Database >  >> RDS >> Oracle

Condizione di trigger in tutte le righe

Un trigger che emette DML (incluso SELECT) sulla stessa tabella che possiede il trigger solleva lo spettro di ORA-4091, l'eccezione della tabella mutante. Oracle lancia questo errore perché si aspetta che il risultato di una transazione sia deterministico e un trigger che emette DML sul proprio tavolo introduce incertezza nel procedimento.

La tabella mutante è un indicatore affidabile di una cattiva progettazione, in particolare un modello di dati errato e sembra essere il caso qui.

Se il valore di una sanzione dipende dall'esito di una singola osservazione, va bene che FINE sia una colonna della tabella OSSERVAZIONE. Tuttavia le tue regole aziendali indicano che il valore può dipendere da diverse osservazioni, se rientrano in un certo periodo. In questo scenario la multa dovrebbe essere in una tabella a sé stante. Avresti bisogno di una chiave esterna tra OBSERVACION e MULTA per indicare quali osservazioni sono coperte da una particolare sanzione.