用戶可以使用COMMIT語句將事務中的所有操作‘保存’到數據庫中。
如果用戶需要撤銷所有的操作,則可以使用ROLLBACK語句回退事物中未提交的操作。
舉個栗子
(1)以用戶scott身份連接到數據庫,並建立兩個表
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 10月 19 20:25:42 2015
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> connect scott/*******
已連接。
SQL> create table temp(n number);
表已創建。
SQL> create table log_table(
2 username varchar2(20),
3 password varchar2(4000)
4 );
表已創建。
(2)建立一個存儲過程INSERT_INTO_LOG,用於向表LOG_TABLE添加記錄。
SQL> create or replace procedure insert_into_log(msg_param varchar2) is
2 pragma autonomous_transaction;
3 begin
4 insert into log_table(username,password)
5 values(user,msg_param);
6 commit;
7 end insert_into_log;
8 /
(3)在匿名程序塊中調用INSERT_INTO_LOG過程
SQL> begin
2 insert_into_log('添加數據到TEMP表之前調用');
3 insert into temp
4 values(1);
5 insert_into_log('添加數據到TEMP表之後調用');
6 rollback;
7 end;
8 /
PL/SQL 過程已成功完成。
(4)查看錶中的數據
SQL> select * from log_table;
USERNAME
--------------------
PASSWORD
-----------------------------------------
SCOTT
添加數據到TEMP表之前調用
SCOTT
添加數據到TEMP表之後調用
從結果中可以看出,在temp表中並沒有數據,說明rollback已經撤銷了insert語句,而log_table中包含了兩條記錄,說明過程中的子事務已經被提交,即過程中的子事務和父事務可以互相互不干涉的進行。