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.