오라클 같은 경우 프로시저 안에서 exception 처리를 할 수 있어서 어디서 에러가 났는지 알 수 있던데 DB2 같은 경우도 exception처리 해 주는 부분이 있나요?
특정 조건이 발생할 때의 SQL 프로시저 동작을 정의하려면 조건 핸들러를 선언해야 합니다. 핸들러 선언의 일반 형식은 다음과 같습니다.
DECLARE handler-type HANDLER FOR condition SQL-procedure-statement
DB2(R)에서 condition과 일치하는 조건을 발생시키면 DB2는 제어를 조건 핸들러로 전달합니다. 조건 핸들러는 handler-type에 의해 표시된 작업을 수행한 다음 SQL-procedure-statement를 실행합니다.
다음 예는 간단한 조건 핸들러를 보여줍니다.
DECLARE CONTINUE HANDLER FOR NOT FOUND SET at_end = 1;
CREATE PROCEDURE EXIT_TEST () LANGUAGE SQL BEGIN DECLARE OUT_BUFFER VARCHAR(80); DECLARE NO_TABLE CONDITION FOR SQLSTATE '42704'; A: BEGIN DECLARE EXIT HANDLER FOR NO_TABLE BEGIN SET OUT_BUFFER='Table does not exist'; END; -- Drop potentially nonexistent table: DROP TABLE JAVELIN; B: SET OUT_BUFFER='Table dropped successfully'; END; -- Copy OUT_BUFFER to some message table: C: INSERT INTO MESSAGES VALUES OUT_BUFFER; END
CREATE PROCEDURE UNDO_TEST () LANGUAGE SQL BEGIN DECLARE OUT_BUFFER VARCHAR(80); DECLARE NO_TABLE CONDITION FOR SQLSTATE '42704'; A: BEGIN ATOMIC DECLARE UNDO HANDLER FOR NO_TABLE BEGIN SET OUT_BUFFER='Table does not exist'; END; INSERT INTO MESSAGES VALUES 'This message will be removed by a rollback.'; -- Drop potentially nonexistent table: DROP TABLE JAVELIN; B: SET OUT_BUFFER='Table dropped successfully'; END; -- Copy OUT_BUFFER to some message table: C: INSERT INTO MESSAGES VALUES OUT_BUFFER; END