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

pragma autonomiczna_transakcja w wyzwalaczu

Używanie transakcji autonomicznej do czegokolwiek innego niż rejestrowanie, które chcesz zachować, gdy transakcja nadrzędna zostanie wycofana, jest prawie na pewno błędem. To nie jest dobre wykorzystanie autonomicznej transakcji.

Co się stanie, na przykład, jeśli zaktualizuję wiersz w t1 ale moja transakcja się cofa. t2 zmiany zostały już wprowadzone i zatwierdzone, więc nie zostaną wycofane. Ogólnie oznacza to, że t2 dane są teraz nieprawidłowe. Celem transakcji jest zapewnienie, że zestaw zmian jest niepodzielny i jest albo całkowicie udany, albo całkowicie cofnięty. Dopuszczenie częściowego sukcesu kodu prawie nigdy nie jest dobrym pomysłem.

Ciężko mi zobaczyć, co można tutaj kupić za pomocą autonomicznej transakcji. Często zobaczysz, że ludzie niewłaściwie używają transakcji autonomicznych, aby niepoprawnie obejść błędy mutacji wyzwalaczy. Ale opublikowany przez Ciebie kod nie wygeneruje błędu wyzwalacza zmutowanego, chyba że w t2 występuje wyzwalacz na poziomie wiersza który również próbował zaktualizować t1 lub jakiś podobny mechanizm, który wprowadzał tabelę mutacji. Jeśli jednak tak jest, użycie transakcji autonomicznej jest generalnie jeszcze gorsze, ponieważ transakcja autonomiczna nie widzi zmian dokonywanych w transakcji nadrzędnej, co prawie na pewno powoduje, że kod zachowuje się inaczej niż byś chciał.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sprawdzić, czy kolumna jest wirtualna w Oracle?

  2. Szybsza alternatywa w Oracle do SELECT COUNT(*) FROM sometable

  3. java.sql.SQLException:ORA-00932:niespójne typy danych:oczekiwano NUMBER dostało BINARY

  4. Jak mogę określić wartość ciągu typu danych Oracle na podstawie jego kodu?

  5. Zamówienie niestandardowe w Oracle SQL