■ 예외 처리시 SQLCODE와 SQLERRM 키워드를 사용하는 방법을 보여준다.
▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
CREATE OR REPLACE PROCEDURE DeleteDepartment(P_DEPTNO IN SCOTT.DEPT.DEPTNO%TYPE) IS BEGIN DELETE FROM SCOTT.DEPT WHERE DEPTNO = P_DEPTNO; EXCEPTION WHEN OTHERS THEN DECLARE V_ERROR_CODE NUMBER := SQLCODE; V_ERROR_MESSAGE VARCHAR2(512) := SQLERRM; BEGIN IF V_ERROR_CODE = -2292 -- 자식 레코드가 있는 경우 처리한다. THEN DELETE FROM EMP WHERE DEPTNO = P_DEPTNO; DELETE FROM DEPT WHERE DEPTNO = P_DEPTNO; ELSIF V_ERROR_CODE = -2291 -- 부모 키가 없는 경우 처리한다. THEN DBMS_OUTPUT.PUT_LINE('부서 번호에 해당하는 부서가 없습니다 : ' || TO_CHAR (P_DEPTNO)); ELSE DBMS_OUTPUT.PUT_LINE('에러가 발생했습니다 : ' || V_ERROR_MESSAGE); END IF; END; END; SET SERVEROUTPUT ON; BEGIN DeleteDepartment(10); END; |