Mam pytanie odnośnie korzystania z transakcji w PL/SQL. Czy po przechwyceniu wyjątku w poniższym przykładzie wszystkie zmiany w bazie wprowadzone przez procedury 1, 2 oraz 3 (procedury wykonują polecenia typu INSERT, UPDATE oraz CREATE) zostaną wycofane?
BEGIN
procedura1(parametr1, parametr2, parametr3);
procedura2(parametr1, parametr2);
procedura3(parametr1);
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
END;
Czy konieczne jest użycie COMMIT? Czy ROLLBACK/COMMIT odwołuje się do konkretnego bloku wewnątrz którego się znajduje czy do całej procedury/funkcji która może zawierać więcej bloków? Czy po zmodyfikowaniu powyższego przykładu w sposób widoczny poniżej przechwycenie wyjątku spowoduje wykonanie pozostałych instrukcji czy program zachowa się w inny sposób? Jeśli tak to jaki?
CREATE OR REPLACE PROCEDURE jakaś_procedura
AS
BEGIN
BEGIN
procedura1(parametr1, parametr2, parametr3);
procedura2(parametr1, parametr2);
procedura3(parametr1);
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
END;
//...pozostałe instrukcje//
END jakaś_procedura;
W procedurach 1, 2 oraz 3 nie ma obsługi wyjątków. Czy w przypadku wystąpienia błędu wewnątrz którejś z nich wyjątek zostanie obsłużony wewnątrz "jakaś_procedura" która je uruchamia?