Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ORACLE Po aktualizacji wyzwalacz:rozwiązywanie błędu tabeli mutacji ORA-04091

„Czy istnieje sposób na uniknięcie błędu tabeli mutacji bez użycia tymczasowej tabeli dla wartości lub autonomicznej transakcji?”

tl;dr nie.

Błąd mutacji tabeli jest spowodowany zapytaniem do tabeli będącej właścicielem wyzwalacza lub tabel, które są zaangażowane w relację klucza obcego z tabelą będącą właścicielem (przynajmniej w starszych wersjach bazy danych, nie ma pewności, czy nadal jest uzyskiwana).

W prawidłowo zaprojektowanej aplikacji nie powinno to być konieczne. Dlatego wiele osób uważa tabele mutacji za wskaźnik słabego modelowania danych. Na przykład mutacja jest często związana z niewystarczającą normalizacją.

Parafrazując Jamiego Zawińskiego:Niektórzy ludzie w obliczu mutującego wyjątku w tabeli myślą:„Wiem, użyję transakcji autonomicznych”. Teraz mają dwa problemy.

Czasami błędu można uniknąć, po prostu modyfikując wartości :NEW w wyzwalaczu BEFORE INSERT OR UPDATE lub używając wirtualnych kolumn. Musisz jednak opublikować więcej szczegółów, aby sprawdzić, czy mają one zastosowanie.

Ale najlepszym obejściem tego problemu jest brak potrzeby używania innego rodzaju.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwróć wyniki zapytania jako listę oddzieloną przecinkami w Oracle

  2. Entity Framework i wiele schematów

  3. po wstawieniu znaku perskiego w Oracle db widzę znak zapytania

  4. Używając PL/SQL, w jaki sposób mogę umieścić zawartość pliku w obiekcie blob?

  5. Przykład Oracle FOR LOOP REVERSE