小實驗oracle tcl

Transaction Ctrl Language

savepoint

rollback


savepoint可以理解成一些臨時的書籤記號,執行DDL類語句會摧毀這些書籤。

test1:

SQL> create table t1_ltn (id number);


Table created.


Elapsed: 00:00:00.02
SQL> insert into t1_ltn values (1);


1 row created.


Elapsed: 00:00:00.05
SQL> savepoint a1;


Savepoint created.


Elapsed: 00:00:00.00
SQL> insert into t1_ltn values (2);


1 row created.


Elapsed: 00:00:00.00
SQL> savepoint a2;


Savepoint created.


Elapsed: 00:00:00.00
SQL> commit;


Commit complete.


Elapsed: 00:00:00.02
SQL> rollback to a1;
rollback to a1
*
ERROR at line 1:
ORA-01086: savepoint 'A1' never established in this session or is invalid




Elapsed: 00:00:00.00


一旦commit,savepoint即被破壞。‘



test2:

重複上面的步驟,建立a1,a2兩個savepoint。

此時rollback to a1是成功的,然是隨後rollback to a2會報錯:

SQL> rollback to a1;

Rollback complete.

Elapsed: 00:00:00.00
SQL> rollback to a2;
rollback to a2
*
ERROR at line 1:
ORA-01086: savepoint 'A2' never established in this session or is invalid


Elapsed: 00:00:00.00

但是按照這個邏輯先rollback to a2,再rollbak to a1則是成功的。

說明只能按照savepoint的倒數順序來rollback。



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