"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.