Tôi đang cố gắng sử dụng chức năng giao dịch trong Oracle SQL lần đầu tiên và dường như không thể tìm thấy một lời giải thích tốt. Tôi hiểu rằng việc bắt đầu một phiên mới sẽ bắt đầu một giao dịch mới. Tôi cũng hiểu rằng cam kết/rollback được sử dụng để kết thúc nó. Những gì tôi đang cố gắng thực hiện là thực hiện hai câu lệnh và nếu một trong hai lỗi này không thành công, hãy hoàn tác mọi thay đổi mà chúng có thể đã thực hiện và tiếp tục thực hiện. Làm thế nào tôi có thể kiểm tra tình trạng này và đưa ra một cam kết hoặc rollback cho phù hợp?Làm thế nào để sử dụng Rollback/Commit trong Oracle SQL
6
A
Trả lời
15
Sử dụng một khối PL/SQL và viết một cái gì đó như thế này:
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;
Xem thêm http://www.adp-gmbh.ch/ora/concepts/transaction.html
2
Cùng với một exaplample đẹp Obi-Wan Kenobi provded giải thích chi tiết các giao dịch của Oracle có thể được tìm thấy tại Chapter 4 của Oracle Hướng dẫn khái niệm (liên kết tôi đã cung cấp cho 10.2, bạn có thể tìm thấy tài liệu phù hợp cho phiên bản của bạn tại trang web của Oracle). Tôi đề nghị bạn đọc chương này để hiểu cách Oracle xử lý việc quản lý giao dịch, và doc toàn bộ là một phần thông tin rất tốt để undestanding cách Oracle DB làm việc như thế nào.
Các vấn đề liên quan
- 1. Làm thế nào để sử dụng SQL (Oracle) để đếm kích thước của một chuỗi?
- 2. Làm thế nào để sử dụng sdo_distance Oracle
- 3. Làm thế nào để chọn nhóm liên tục đầu tiên của hàng sử dụng Oracle SQL
- 4. Làm cách nào để sử dụng các biến trong Oracle SQL Developer?
- 5. làm thế nào để sử dụng một biến trong kịch bản oracle cho tên bảng
- 6. (+) làm gì trong Oracle SQL?
- 7. Làm cách nào để xác định SQL tải cao trong Oracle, sử dụng chế độ xem oracle?
- 8. Làm thế nào để sử dụng hiệu lực thời gian trong Oracle 12c?
- 9. Sử dụng Oracle SQL để tạo lồng nhau XML
- 10. Làm cách nào để có được năm hiện tại bằng cách sử dụng SQL trên Oracle?
- 11. nhỏ hơn hoặc bằng SỬ DỤNG TRONG Oracle SQL
- 12. Làm thế nào để sử dụng Oracle ORDER BY và ROWNUM chính xác?
- 13. Làm thế nào để buộc oracle không sử dụng một chỉ số
- 14. Làm thế nào để thả Oracle LOB
- 15. Sử dụng Oracle SQL, làm cách nào để xuất số ngày trong tuần và ngày trong tuần?
- 16. Làm thế nào để chạy truy vấn Oracle với bắt đầu/kết thúc trong SQL * Plus?
- 17. Làm thế nào để chuyển đổi CLOB sang VARCHAR2 bên trong oracle pl/sql
- 18. Oracle SQL sử dụng như một ký tự đại diện
- 19. Lệnh SỬ DỤNG DATABASE trên SQL PLUS ORACLE 11gr1
- 20. làm thế nào để kiểm tra không ràng buộc cột null trong sql oracle?
- 21. Làm thế nào để xử lý một trích dẫn trong Oracle SQL
- 22. Làm thế nào để xuất kết quả sql oracle vào một tập tin trong cửa sổ?
- 23. Làm thế nào để bạn sử dụng telnet để kiểm tra kết nối với Oracle?
- 24. Làm thế nào để viết một bảng chữ trong Oracle?
- 25. Làm thế nào để nhập và hiển thị ngày giờ và phút vào Oracle SQL Developer?
- 26. Liệt kê tất cả các tháng sử dụng oracle sql
- 27. Làm thế nào để sử dụng SqlCacheDependency?
- 28. Làm thế nào để đăng nhập SQL thô từ Oracle api C++ api?
- 29. Làm thế nào để tạo một bãi chứa với Oracle PL/SQL Developer?
- 30. Làm cách nào để sử dụng Group By dựa trên tuyên bố Case trong Oracle?
Ah ok, cảm ơn, nhìn vào khối nhiều hơn một chút, tôi đã phát hiện ra một vấn đề khác với những gì tôi đang cố gắng làm. Tôi đang cố gắng thêm cột vào bảng, đặt giá trị mặc định của tất cả các mục nhập hiện tại và đặt trình kích hoạt để cập nhật giá trị này nếu cần. Các khối chỉ cho phép SELECT, INSERT, UPDATE, DELETE. Bất kỳ ý tưởng cho gói này trong một giao dịch? – dpsthree
Các câu lệnh DDL (TẠO, ALTER, DROP, v.v.) hoàn toàn COMMIT trước và sau khi thực hiện. Vì vậy, các hành động bạn đang đề cập đến không thể được thực hiện trong một giao dịch duy nhất và không thể được khôi phục. –
Bạn có thể, bằng cách này, thực hiện các câu lệnh DDL trong một khối PL/SQL bằng cách sử dụng SQL động, ví dụ: 'EXECUTE IMMEDIATE 'ALTER TABLE foo THÊM x NUMBER''. Nhưng điều này không thay đổi thực tế là câu lệnh DDL thực hiện một COMMIT trước và sau khi cập nhật từ điển dữ liệu. –