Zasadniczo procedury nie powinny się zgadzać. Tego rodzaju decyzje dotyczące kontroli transakcji należy pozostawić kodowi wyższego poziomu, który wie, kiedy transakcja logiczna jest faktycznie zakończona. Jeśli popełniasz wewnątrz procedury przechowywanej, ograniczasz jej możliwość ponownego użycia, ponieważ osoba dzwoniąca, która chce, aby zmiany wprowadzone w procedurze były częścią większej transakcji, nie może po prostu bezpośrednio wywołać procedury.
Jeśli wywołasz procedurę interaktywnie, będziesz musiał jawnie zatwierdzić lub wycofać transakcję, ponieważ Oracle nie ma pojęcia, czy zamierzasz wywołać procedurę jako transakcję logiczną, czy też zamierzasz utworzyć większą transakcję obejmującą wiele wywołań procedur. Jeśli używasz dbms_scheduler
, dbms_scheduler
zakłada się, że zadanie jest logiczną transakcją i zatwierdza na końcu zadania, zakładając, że zakończyło się ono sukcesem ( dbms_job
robi to samo).
Funkcje nie powinny przede wszystkim manipulować danymi. Funkcja, która manipuluje danymi, nie może zostać wywołana z instrukcji SQL (z wyjątkiem przypadku, w którym sama funkcja deklaruje użycie autonomicznej transakcji, która prawie nigdy nie jest odpowiednia). Cały sens posiadania zarówno funkcji, jak i procedur polega na tym, że funkcje mogą być osadzone w instrukcjach SQL i mogą być swobodniej przyznawane użytkownikom, ponieważ nie zmieniają żadnych danych.
Odpowiedzieć na Twoje pytanie; DLACZEGO?
Prawdopodobnie już to wiesz, ponieważ post ma 2 lata. Ale odpowiem tylko dla nagrania.
Powód nr 1 wymaga zatwierdzenia, a nr 2 nie dlatego, że domyślnym ustawieniem bazy danych w Oracle jest zatwierdzanie transakcji po zakończeniu sesji. Jeśli korzystasz z narzędzia sqlplus i uruchamiasz kod ręcznie, transakcja nie zostanie natychmiast zatwierdzona. Jeśli wydasz wyraźne zatwierdzenie LUB wylogujesz się z SQL, transakcja zostanie zatwierdzona.
Powodem, dla którego otrzymujesz automatyczne zatwierdzenie nr 2, jest to, że tworzy ono sesję do uruchomienia skryptu. Po zakończeniu automatycznie się wylogowuje, co spowoduje automatyczne zatwierdzenie.
źródło