Próbuję wykorzystać funkcję transakcji w Oracle SQL po raz pierwszy i nie wydaje się znaleźć dobrego wyjaśnienia. Rozumiem, że rozpoczęcie nowej sesji rozpocznie nową transakcję. Rozumiem również, że zatwierdzenie/wycofanie służy do zakończenia. Próbuję wykonać dwie instrukcje i jeśli jedna z nich się nie powiedzie, cofnij wszelkie wprowadzone zmiany i kontynuuj wykonywanie. Jak mogę sprawdzić ten warunek i odpowiednio zatwierdzić lub wycofać?Howto używać Cofanie/Commit w Oracle SQL
6
A
Odpowiedz
15
Użyj bloku PL/SQL i napisać coś takiego:
begin
statement_zero;
savepoint my_savepoint;
begin
-- if either of these fail, then exception section will be executed
statement_one;
statement_two;
exception
when others then
rollback to my_savepoint;
end;
statement_three;
commit;
end;
Zobacz również http://www.adp-gmbh.ch/ora/concepts/transaction.html
2
Wraz z ładnym exaplample Obi-Wan Kenobi provded szczegółowe wyjaśnienie transakcji Oracle można znaleźć na Chapter 4 Oracle Przewodnik po koncepcjach (podany link dotyczy wersji 10.2, dokument można znaleźć również w tej wersji na stronie Oracle). Sugeruję przeczytanie tego rozdziału, aby zrozumieć, w jaki sposób Oracle zajmuje się zarządzaniem transakcjami, a dokument w całości jest bardzo dobrą informacją o nienajlepszym działaniu bazy danych Oracle.
Ach, ok, dzięki, zaglądając w bloki, odkryłem jeszcze jeden problem z tym, co próbuję zrobić. Próbuję dodać kolumnę do tabeli, ustawić domyślne wartości wszystkich bieżących wpisów i ustawić wyzwalacz, aby zaktualizować tę wartość w razie potrzeby. Bloki pozwalają tylko WYBRAĆ, WSTAWIĆ, AKTUALIZOWAĆ, USUWAĆ. Wszelkie pomysły na zawijanie tego w transakcji? – dpsthree
Instrukcje DDL (CREATE, ALTER, DROP, itd.) Domyślnie COMMIT przed i po wykonaniu. Tak więc działania, o których mowa, nie mogą zostać wykonane w pojedynczej transakcji i nie można ich wycofać. –
Można, nawiasem mówiąc, wykonywać instrukcje DDL w bloku PL/SQL przy użyciu dynamicznego SQL, np. 'WYKONAJ NATYCHMIASTOWE 'ALTER TABELA foo ADD x NUMBER''. Ale to nie zmienia faktu, że instrukcja DDL wykonuje COMMIT przed aktualizacją słownika danych i po aktualizacji. –