Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Auslösebedingung in allen Zeilen

Ein Trigger, der DML (einschließlich SELECT) für dieselbe Tabelle ausgibt, die den Trigger besitzt, löst das Gespenst von ORA-4091 aus, der Mutating-Table-Ausnahme. Oracle schleudert diesen Fehler, weil es erwartet, dass das Ergebnis einer Transaktion deterministisch ist, und ein Auslöser, der DML auf seiner eigenen Tabelle ausgibt, Unsicherheit in das Verfahren einführt.

Eine Mutationstabelle ist ein zuverlässiger Indikator für schlechtes Design, insbesondere ein schlechtes Datenmodell, und das scheint hier der Fall zu sein.

Wenn der Wert einer Geldstrafe vom Ergebnis einer einzelnen Beobachtung abhängt, darf FINE eine Spalte in der Tabelle OBSERVACION sein. Ihre Geschäftsregeln weisen jedoch darauf hin, dass der Wert von mehreren Beobachtungen abhängen kann, wenn sie in einen bestimmten Zeitraum fallen. In diesem Szenario sollte die Geldbuße in einer eigenen Tabelle stehen. Sie benötigen einen Fremdschlüssel zwischen OBSERVACION und MULTA, um anzugeben, welche Beobachtungen von einer bestimmten Strafe betroffen sind.