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.
Powiązane problemy
- 1. Jak używać wyliczeń w Oracle?
- 2. Howto do SQL Server utf8?
- 3. Oracle SQL vs Oracle PL/SQL
- 4. Howto używać kont Google jako loginu
- 5. Dynamiczny pivot w Oracle SQL
- 6. Dla pętli w Oracle SQL
- 7. Importować plik .sql w Oracle?
- 8. Howto? Parametry i instrukcja LIKE SQL
- 9. Obsługa Bool Oracle SQL
- 10. Oracle SQL select odrębny
- 11. MAX (data) - SQL ORACLE
- 12. Dodawanie dni Oracle SQL
- 13. Porównanie wartości zerowej Oracle/PL SQL/SQL w przypadku klauzuli
- 14. Oracle: w jakiej sytuacji używać RAISE_APPLICATION_ERROR?
- 15. Howto pg_restore
- 16. Oracle Sql Przechowywanie połączeń programisty
- 17. oracle pl/sql DBMS_LOCK error
- 18. C# oracle sql przygotowane oświadczenie
- 19. Ręczne przekazywanie sekwencji - sql oracle
- 20. Oracle SQL: Przecięcie literałów tptle
- 21. ORACLE SQL Koniec zakresu dat
- 22. Oracle Sortowanie SQL 10g VARCHAR2
- 23. Oracle SQL - znajdź NIE wartości w tabeli
- 24. Używanie kursora Ref w Oracle SQL Developer
- 25. mniejsza lub równa w Oracle SQL
- 26. Zakres dat w języku PL/SQL (Oracle)
- 27. Znajdź duplikaty w kolumnie Oracle SQL
- 28. Przypadek ignorowania SQL w grupie według? (oracle)
- 29. Skonsoliduj ciągi w Oracle SQL bez odstępu?
- 30. Zmienne tabeli w Oracle PL/SQL?
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. –