sql >> Database >  >> RDS >> Oracle

ORACLE Na update-trigger:ORA-04091 muterende tabelfout oplossen

"Is er een manier om de muterende tabelfout te vermijden zonder een tijdelijke tabel voor waarden of een autonome transactie te gebruiken?"

tl;dr nee.

De muterende tabelfout wordt veroorzaakt door het opvragen van de tabel die eigenaar is van de trigger, of tabellen die betrokken zijn bij een externe sleutelrelatie met de eigenaarstabel (tenminste in oudere versies van de database, niet zeker of deze nog steeds wordt verkregen).

In een goed ontworpen applicatie zou dit niet nodig moeten zijn. Dit is de reden waarom veel mensen mutatietabellen beschouwen als een indicator van slechte gegevensmodellering. Mutatie wordt bijvoorbeeld vaak geassocieerd met onvoldoende normalisatie.

Om Jamie Zawinski te parafraseren:Sommige mensen denken, wanneer ze worden geconfronteerd met een muterende tabeluitzondering, "Ik weet het, ik zal autonome transacties gebruiken." Nu hebben ze twee problemen.

Soms kan de fout worden vermeden door simpelweg de :NEW-waarden te wijzigen in een BEFORE INSERT OR UPDATE-trigger of door virtuele kolommen te gebruiken. Maar je moet meer details posten om te zien of deze van toepassing zijn.

Maar de beste oplossing is om geen andere soort nodig te hebben.




  1. Reset het root-wachtwoord van MySQL op Windows

  2. Docker - Hoe kan de opdracht psql in de postgres-container worden uitgevoerd?

  3. Fouten in evoluties op Heroku

  4. Hoe op te lossen "Er moet een correlatienaam worden opgegeven voor de bulkrijenset in de from-clausule." in SQL Server