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

Czy wyraźne zatwierdzenia są w porządku, gdy włączone jest automatyczne zatwierdzanie?

Zatwierdzanie w pętli jest generalnie złym pomysłem (tak samo jak zezwolenie na automatyczne zatwierdzanie dowolnego narzędzia).

Zatwierdzenie wewnątrz pętli znacznie utrudnia pisanie kodu, który można ponownie uruchomić. Co się stanie, jeśli po 3 iteracjach wystąpi błąd? Pomyślnie zatwierdziłeś wyniki 2 UPDATE sprawozdania. Przypuszczalnie musiałbyś wtedy albo dowiedzieć się, które wiersze zostały zaktualizowane i napisać kod, aby cofnąć aktualizacje, albo musiałbyś dodać kod, który uniknie próby aktualizacji danych dla tych dwóch udanych yearid wartości. To z pewnością możliwe. Wiąże się to jednak z napisaniem dużej ilości kodu do śledzenia postępów i ogólnie sprawia, że ​​kod jest znacznie bardziej złożony.

Zatwierdzanie wewnątrz pętli znacznie spowalnia kod. Zaciąganie jest generalnie dość kosztowną operacją. Robienie tego w pętli jest więc generalnie złym pomysłem. To mniejszy problem, jeśli masz tylko kilkadziesiąt iteracji pętli. Ale jeśli masz setki lub tysiące iteracji, możesz łatwo spędzić większość swojego czasu na poświęcaniu się.

Zatwierdzenie wewnątrz pętli znacznie zwiększa ryzyko wystąpienia błędu ORA-01555. Twoje zapytanie w MyTable potrzebuje odczytu spójnego widoku danych. Jeśli jednak dokonasz zatwierdzenia wewnątrz pętli, poinformujesz Oracle, że Twoja sesja nie wymaga już starszego UNDO dane. Jeśli Oracle wyczyści UNDO dane potrzebne do kolejnej iteracji pętli, otrzymasz błąd. A potem wracasz do pracy z kodem, którego nie można ponownie uruchomić, w którym pomyślnie przeszedłeś przez iteracje, ale nie wiesz, które lata zostały przetworzone, a które należy przetworzyć.

Zatwierdzanie wewnątrz pętli może powodować problemy ze spójnością danych. Jeśli na przykład inna sesja generuje raporty, łatwo jest w nich zobaczyć częściowo zaktualizowane dane, co często oznacza, że ​​dane będą niespójne. Jeśli dane za 3 lata uległy zmianie, ale inne lata nie zmieniły się, zrozumienie raportów może być bardzo trudne, a ludzie (lub procesy) mogą łatwo podejmować nieprawidłowe decyzje.

Zatwierdzanie wewnątrz pętli sprawia, że ​​kod jest mniej przydatny do ponownego użycia. Jeśli twój kod zawiera zatwierdzenia (lub wycofania inne niż do punktu zapisu, który ustanowiłeś wewnątrz bloku), nie może być wywołany przez żaden inny fragment kodu, który nie chce jeszcze zatwierdzić swojej transakcji. To sprawia, że ​​ludzie próbują ponownie wdrożyć logikę bez kontroli transakcji lub nieprawidłowo naruszają integralność transakcji, co nieuchronnie prowadzi ich do tworzenia aplikacji, które wprowadzają problemy ze spójnością danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czym jest PostgreSQL odpowiednik SYSDATE firmy Oracle?

  2. NetSuite zapisał formułę wyszukiwania, aby pomnożyć wyniki z dwóch innych kolumn

  3. Wyzwalacz Oracle do tworzenia autonumeracji

  4. Sekwencja specyficzna dla jednostki

  5. Wywołaj funkcję Oracle z Javy