ROLLBACK WORK 문은 마지막 트랜잭션 이후의 모든 데이터베이스의 갱신을 제거한다. WORK 키워드는 생략 가능하다. 이것은 데이터베이스에 영구적으로 입력하기 전에 부정확하고 불필요한 갱신을 무효화할 수 있다. 트랜잭션 동안 획득한 모든 잠금은 해제된다.
[;]ROLLBACK [ WORK ]
구문 앞에 ;을 붙일 경우 세션 명령어로 간주하여 바로 실행되며 생략할 경우 쿼리문의 하나로 간주하여 ;x[run]을 수행하기 전까지 실행을 보류한다.
다음 예제는 동일한 클래스의 정의와 인스턴스를 수정하는 두 개의 명령을 보여주고 있다.
alter class code
drop s_name;
insert into code (s_name, f_name) values ('D','Diamond');
;xrun
In line 3, column 21,
ERROR: s_name is not defined.
code 클래스의 정의에서 s_name 속성이 이전에 제거되었기 때문에 INSERT 문의 실행은 실패한다. code 클래스에 입력하려고 했던 데이터는 틀리지 않으나 클래스에서 속성이 잘못 제거되었다. 이 시점에서 code 클래스의 원래 정의를 복원하기 위해서 ROLLBACK WORK 문을 사용할 수 있다.
;rollback work
이후에 ALTER CLASS 명령을 다시 입력하여 s_name 속성을 제거하며, INSERT 문을 수정한다. 트랜잭션이 중단되었기 때문에 INSERT 명령은 다시 입력되어야 한다. 데이터베이스 갱신이 의도한 대로 이루어졌으면 변경을 영구화하기 위해 트랜잭션을 커밋한다.
alter class code
drop s_name;
insert into code (f_name)
values ('Diamond');
;commit work