oracle課堂收錄-過程中的事務處理

用戶可以使用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中包含了兩條記錄,說明過程中的子事務已經被提交,即過程中的子事務和父事務可以互相互不干涉的進行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章