============= 미리정의된 에러 출력 ================================
CREATE OR REPLACE PROCEDURE PreException_test
(v_deptno IN emp.empno%TYPE)
IS
v_emp emp%ROWTYPE;
BEGIN
DBMS_OUTPUT.ENABLE;
SELECT empno, ename, deptno
INTO v_emp.empno, v_emp.ename, v_emp.deptno
FROM emp
WHERE deptno = v_deptno ;
DBMS_OUTPUT.PUT_LINE('사번 : ' || v_emp.empno);
DBMS_OUTPUT.PUT_LINE('이름 : ' || v_emp.ename);
DBMS_OUTPUT.PUT_LINE('부서번호 : ' || v_emp.deptno);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE('데이터가 존재 합니다.');
DBMS_OUTPUT.PUT_LINE('DUP_VAL_ON_INDEX 에러 발생');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS 에러 발생');
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('NO_DATA_FOUND 에러 발생');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('기타 에러 발생');
END;
/
============== 미리 정의되지 않은 에러 ==================================
CREATE OR REPLACE PROCEDURE NonPreException_Test
IS
not_null_test EXCEPTION; -- STEP 1
/* not_null_test 는 선언된 예외 이름
-1400 Error 처리번호는 표준 Oracle7 Server Error 번호 */
PRAGMA EXCEPTION_INIT(not_null_test, -1400); -- STEP 2
BEGIN
DBMS_OUTPUT.ENABLE;
-- empno 를 입력하지 않아서 NOT NULL 에러 발생
INSERT INTO emp(ename, deptno) VALUES('tiger', 30);
EXCEPTION
WHEN not_null_test THEN -- STEP 3
DBMS_OUTPUT.PUT_LINE('not null 에러 발생 ');
END;
/
=============== 사용자 정의 예제 =======================================
CREATE OR REPLACE PROCEDURE User_Exception
(v_deptno IN emp.deptno%type )
IS
-- 예외의 이름을 선언
user_define_error EXCEPTION; -- STEP 1
cnt NUMBER;
BEGIN
DBMS_OUTPUT.ENABLE;
SELECT COUNT(empno)
INTO cnt
FROM emp
WHERE deptno = v_deptno;
IF cnt < 5 THEN
-- RAISE 문을 사용하여 직접적으로 예외를 발생시킨다
RAISE user_define_error; -- STEP 2
END IF;
EXCEPTION
-- 예외가 발생할 경우 해당 예외를 참조한다.
WHEN user_define_error THEN -- STEP 3
RAISE_APPLICATION_ERROR(-20001, '부서에 사원이 몇명 안되네요..');
END;
오라클 전용서버모드(dedicated)와 표준모드(MTS) 로 각각 사용하기 (0) | 2011.04.11 |
---|---|
오라클 MERGE문 간단하게 또는 복잡하게 (0) | 2011.03.29 |
XML 자료를 오라클 DB에 입력하기 예제 (0) | 2011.02.11 |
오라클 커서 테이블 사용하기 예제 (0) | 2011.02.11 |
자리수 설정해서 보여주기 (0) | 2011.02.09 |
댓글 영역