by classwizar [PL/SQL] [2012.12.31 12:05:27]
-- 테스트 테이블 생성 CREATE TABLE a (no NUMBER(2)); CREATE TABLE b (no NUMBER(2)); -- PL/SQL 블록에서 테이블 a에는 정상값 입력, 테이블 b에는 예외상황 발생을 위한 값 입력 BEGIN INSERT INTO a VALUES (10); INSERT INTO b VALUES (1000); EXCEPTION WHEN OTHERS THEN NULL; -- 아무것도 하지 않고 그냥 종료하게 하기 위함 END; / -- 테이블 a의 내용 확인 SELECT * FROM a;위 쿼리문의 결과는 당연 10이라는 값이 출력됩니다. 그 이유는 PL/SQL에서 시작된 트랜잭션이 아직 끝나지 않고 계속되고 있기 때문입니다. 정말 그런지 확인해 보려면 ROLLBACK 해 보면 됩니다.
ROLLBACK; -- 롤백 후 테이블 a의 내용 확인 SELECT * FROM a;롤백한 후 테이블 a의 내용을 확인하면 삽입된 데이터가 롤백되어 보이지 않게 됩니다. 그리고 이 롤백에 의해 트랜잭션은 종료가 되지요.
BEGIN INSERT INTO a VALUES (10); INSERT INTO b VALUES (1000); EXCEPTION WHEN OTHERS THEN ROLLBACK; -- 명시적으로 ROLLBACK END; /그럼, 도움이 되셨길...