ROLLBACK
ROLLBACK#
구문#
rollback ::=#
설명#
ROLLBACK (TO SAVEPOINT)#
현재의 트랜잭션을 모두 롤백하거나 (이전에 정의한) 저장점까지 부분 롤백하는 구문이다.
FORCE global_tx_id#
XA환경에서 "in-doubt"상태의 트랜잭션을 강제로 롤백하는 구문이다.
global_tx_id는 글로벌 트랜잭션의 포맷(format) 아이디, 글로벌 트랜잭션(global transaction) 아이디, 브랜치 수식자(branch qualifier)를 문자열로 나타낸 것이다.
주의 사항#
이 구문은 AUTOCOMMIT 모드일 때는 사용할 수 없다.
예제#
iSQL> AUTOCOMMIT OFF;
Set autocommit off success.
iSQL> UPDATE employees SET salary = 2300 WHERE eno = 3;
1 row updated.
iSQL> SAVEPOINT emp3_sal;
Savepoint success.
iSQL> DELETE FROM employees WHERE eno = 19;
1 row deleted.
iSQL> SAVEPOINT emp19_ret;
Savepoint success.
iSQL> INSERT INTO employees(eno, e_lastname, e_firstname, salary, sex) VALUES(21, 'Templeton', 'Kimmie', 3000, 'F');
1 row inserted.
iSQL> SAVEPOINT emp21_join;
Savepoint success.
iSQL> UPDATE employees SET salary = 2200 WHERE eno=18;
1 row updated.
iSQL> SELECT eno, e_lastname, e_firstname, salary FROM employees WHERE eno in (3, 18, 19, 21);
ENO E_LASTNAME E_FIRSTNAME SALARY
-------------------------------------------------------------------------
3 Kobain Ken 2300
18 Huxley John 2200
21 Templeton Kimmie 3000
3 rows selected.
저장점 emp21_join 지점까지 트랜잭션을 롤백한다.
iSQL> ROLLBACK TO SAVEPOINT emp21_join;
Rollback success.
iSQL> SELECT eno, e_lastname, e_firstname, salary FROM employees WHERE eno in (3, 18, 19, 21);
ENO E_LASTNAME E_FIRSTNAME SALARY
-------------------------------------------------------------------------
3 Kobain Ken 2300
18 Huxley John 1900
21 Templeton Kimmie 3000
3 rows selected.
저장점 emp19_ret 지점까지 트랜잭션을 롤백한다.
iSQL> ROLLBACK TO SAVEPOINT emp19_ret;
Rollback success.
iSQL> SELECT eno, e_lastname, e_firstname, salary FROM employees WHERE eno in (3, 18, 19, 21);
ENO E_LASTNAME E_FIRSTNAME SALARY
-------------------------------------------------------------------------
3 Kobain Ken 2300
18 Huxley John 1900
2 rows selected.
첫 번째 UPDATE 문, 첫번째 DELETE문과 마지막 DML문 (두 번째 INSERT문)에 의해 수행된 모든 변경을 커밋한다. 모든 다른 DML 문들의 변경사항은 COMMIT 되기 전에 롤백되어 사라졌다. 또한 저장점 emp21_join은 더 이상 유효하지 않다.
iSQL> ROLLBACK TO SAVEPOINT emp21_join;
[ERR-11016 : Savepoint not found]
iSQL> INSERT INTO employees(eno, e_lastname, e_firstname, sex, join_date) VALUES(22, 'Chow', 'May', 'F', TO_DATE('2011-11-19 00:00:00', 'YYYY-MM-DD HH:MI:SS'));
1 row inserted.
iSQL> COMMIT;
Commit success.
iSQL> SELECT eno, e_lastname, e_firstname, salary FROM employees;
ENO E_LASTNAME E_FIRSTNAME SALARY
-------------------------------------------------------------------------
1 Moon Chan-seung
2 Davenport Susan 1500
4 Foster Aaron 1800
5 Ghorbani Farhad 2500
6 Momoi Ryu 1700
7 Fleischer Gottlieb 500
8 Wang Xiong
9 Diaz Curtis 1200
10 Bae Elizabeth 4000
11 Liu Zhen 2750
12 Hammond Sandra 1890
13 Jones Mitch 980
14 Miura Yuu 2003
15 Davenport Jason 1000
16 Chen Wei-Wei 2300
17 Fubuki Takahiro 1400
18 Huxley John 1900
20 Blake William
3 Kobain Ken 2300
22 Chow May 0
20 rows selected.
iSQL> COMMIT;
Commit success.