sql >> Databáze >  >> RDS >> Oracle

ORACLE Po spuštění aktualizace:vyřešení chyby mutující tabulky ORA-04091

"Existuje nějaký způsob, jak se vyhnout chybě mutující tabulky bez použití dočasné tabulky pro hodnoty nebo autonomní transakce?"

tl;dr ne.

Chyba mutující tabulky je způsobena dotazem na tabulku, která vlastní spouštěč, nebo na tabulky, které jsou zapojeny do vztahu cizího klíče s vlastnící tabulkou (alespoň ve starších verzích databáze si nejste jisti, zda ji stále získává).

Ve správně navržené aplikaci by to nemělo být nutné. To je důvod, proč mnoho lidí považuje mutující tabulky za indikátor špatného modelování dat. Mutace je například často spojena s nedostatečnou normalizací.

Abychom parafrázovali Jamieho Zawinského:Někteří lidé, když jsou konfrontováni s výjimkou mutující tabulky, si myslí:"Já vím, použiji autonomní transakce." Nyní mají dva problémy.

Někdy se lze této chybě vyhnout jednoduše úpravou hodnot :NEW ve spouštěči BEFORE INSERT OR UPDATE nebo pomocí virtuálních sloupců. Budete však muset zveřejnit další podrobnosti, abyste zjistili, zda platí.

Ale nejlepším řešením je nepotřebovat žádný jiný druh.




  1. Jak získat seznam všech jazyků v SQL Server (T-SQL)

  2. Jak importovat soubor .bak SQL Serveru do MySQL?

  3. Jak převést prázdná místa na hodnoty null pomocí SQL Server?

  4. Lze INSERT [...] ON CONFLICT použít pro porušení cizího klíče?