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

ORACLE Dopo il trigger di aggiornamento:risoluzione dell'errore di tabella mutante ORA-04091

"C'è un modo per evitare l'errore di tabella mutante senza utilizzare una tabella temporanea per i valori o una transazione autonoma?"

tl;dr no.

L'errore della tabella mutante è causato dall'interrogazione della tabella proprietaria del trigger o delle tabelle coinvolte in una relazione di chiave esterna con la tabella proprietaria (almeno nelle versioni precedenti del database, non sono sicuro che ottenga ancora).

In un'applicazione progettata correttamente questo non dovrebbe essere necessario. Questo è il motivo per cui molte persone considerano le tabelle mutanti come un indicatore di una scarsa modellizzazione dei dati. Ad esempio, la mutazione è spesso associata a una normalizzazione insufficiente.

Per parafrasare Jamie Zawinski:alcune persone, di fronte a un'eccezione di tabella mutante, pensano "Lo so, userò transazioni autonome". Ora hanno due problemi.

A volte l'errore può essere evitato semplicemente modificando i valori :NEW in un trigger BEFORE INSERT OR UPDATE o utilizzando colonne virtuali. Ma dovrai pubblicare maggiori dettagli per vedere se si applicano.

Ma la soluzione migliore è non aver bisogno di nessun altro tipo.