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

ORACLE Efter opdateringstrigger:løser ORA-04091 mutationstabelfejl

"Er der nogen måde at undgå den muterende tabelfejl uden at bruge en midlertidig tabel til værdier eller en autonom transaktion?"

tl;dr nej.

Den muterende tabelfejl er forårsaget af forespørgsel i tabellen, der ejer triggeren, eller tabeller, der er involveret i et fremmednøgleforhold med ejertabellen (i det mindste i ældre versioner af databasen, ikke sikker på, om den stadig opnås).

I en korrekt designet applikation burde dette ikke være nødvendigt. Det er derfor, mange mennesker betragter mutationstabeller som en indikator for dårlig datamodellering. For eksempel er mutation ofte forbundet med utilstrækkelig normalisering.

For at parafrasere Jamie Zawinski:Nogle mennesker, når de konfronteres med en muterende tabel-undtagelse, tænker "Jeg ved det, jeg vil bruge autonome transaktioner." Nu har de to problemer.

Nogle gange kan fejlen undgås ved blot at ændre :NEW-værdierne i en BEFORE INSERT OR UPDATE-udløser eller ved at bruge virtuelle kolonner. Men du bliver nødt til at skrive flere detaljer for at se, om disse gælder.

Men den bedste løsning er ikke at have brug for nogen anden form.




  1. iPhone humørikoner indsættes i MySQL, men bliver tom værdi

  2. Understøttelse af MyIsam-motortransaktioner

  3. Oracle svarende til MySQL INSERT IGNORE?

  4. Fejl i MySQL ved indstilling af standardværdi for DATE eller DATETIME