2010-10-11 22 views
6

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

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

+0

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

+5

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ć. –

+0

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. –

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.