2010-10-11 28 views
6

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

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

+0

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

+5

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

+0

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

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