문제
결과 값으로 옳은 것은?
SQLCREATE TABLE TAB1 (COL1 NUMBER, COL2 NUMBER); INSERT INTO TAB1 VALUES (1, 2); INSERT INTO TAB1 VALUES (2, 1); INSERT INTO TAB1 VALUES (3, 4); SAVEPOINT 1; UPDATE TAB1 SET COL1=4 WHERE COL2<=2; SAVEPOINT 2; DELETE FROM TAB1 WHERE COL2=2; ROLLBACK SAVEPOINT 2; INSERT INTO TAB1 VALUES (4, 1); COMMIT; SELECT COUNT(*) FROM TAB1 WHERE COL1=4;
① 1 ② 2 ③ 3 ④ 4
정답
3번
해설
정답: 3. UPDATE 후 COL2가 1 또는 2인 기존 두 행의 COL1이 4가 되고, DELETE는 SAVEPOINT 2로 롤백되어 취소된다. 이후 (4,1)이 추가되므로 COL1=4인 행은 총 3개이다.
오답 풀이
- 1번: UPDATE로 변경된 행과 INSERT 행을 모두 반영하지 않은 결과이다.
- 2번: UPDATE된 (4,1) 행을 누락한 결과이다.
- 3번: UPDATE된 2행과 INSERT된 1행을 합쳐 3개이므로 옳다.
- 4번: COL1=4인 행은 4개가 아니다.
보충 개념 SAVEPOINT 이후 ROLLBACK TO SAVEPOINT를 수행하면 해당 저장점 이후의 변경만 취소된다. SAVEPOINT 2 이후의 DELETE는 취소되지만, SAVEPOINT 2 이전의 UPDATE는 유지된다.