Oracle không hỗ trợ các giao dịch lồng nhau. Nếu một giao dịch cam kết, nó sẽ cam kết. Đó là lý do tại sao bạn thường không muốn cam kết (hoặc khôi phục) một giao dịch trong một thủ tục được lưu trữ, điều này gây khó khăn cho việc sử dụng lại thủ tục ở nơi khác nếu ngữ nghĩa giao dịch của bạn khác nhau.
Tuy nhiên, bạn có thể khai báo một điểm lưu ở đầu quy trình của mình và quay trở lại điểm lưu đó trong trường hợp có lỗi. Sau đó, nếu bạn xóa cam kết, thì giao dịch chỉ được kiểm soát bởi mã ứng dụng chứ không phải mã cơ sở dữ liệu
begin
savepoint beginning_of_proc;
insert/update/delete...
exception
when OTHERS then
rollback to beginning_of_proc;
raise;
end;
Tuy nhiên, trong trường hợp này, thành kiến của tôi sẽ là không có điểm lưu trong mã, không có khôi phục và không bắt được ngoại lệ trừ khi bạn đang làm điều gì đó hữu ích với nó. Chỉ cần thực hiện DML, để mọi ngoại lệ được đưa ra và xử lý chúng trong ứng dụng của bạn.