오라클 10g

사용자 예외처리 - Pragma Exception_init

무니버 2010. 12. 16. 12:38

 

 

 

오라클에서는 오류메세지가 나올때 이를 사용자 정의로 바꾸어 줄수 있는 방식을 제공한다.

 

예를 간단하기 위해서 사용자 ID만을 갖는 간단한  테이블을 만들어보았다.  이름을 TBL_TEMPLOGIN 라고 해보았고

ID는 중복될수 없으므로 COLUMN을 PK로 지정해보았다고 해보자.

 

CREATE TABLE TBL_TEMPLOGIN
(MEM_ID  VARCHAR2(12)
,CONSTRAINT TBL_TEMPLOGIN_PK PRIMARY KEY(MEM_ID)
);

 

이제 테이블에 ID값을 넣는 프로시저를 만들어보자.

 

 

CREATE OR REPLACE PROCEDURE PCD_IDPUT
(V_ID IN TBL_TEMPLOGIN.MEM_ID%TYPE)

IS
BEGIN
    INSERT INTO TBL_TEMPLOGIN VALUES
     (V_ID);
END;

 

 

이제 ID는 PK이므로 다음처럼 동일값을 갖는 데이터를 2번 넣을려고 하면 다음과 같은 오류 메세지가 보일것이다.

EXEC PCD_INPUT('prince97')

EXEC PCD_INPUT('prince97') 

 

   
위처럼 ORA-00001 : PK위배에 대한 내용이 나온다.

 

 

 

이 오류메세지를 를 사용자 정의로 바꾸어 보자.

 

 

CREATE OR REPLACE PROCEDURE PCD_IDPUT
(V_ID IN TBL_TEMPLOGIN.MEM_ID%TYPE)

IS

ID_EXIST EXCEPTION;
PRAGMA EXCEPTION_INIT(ID_EXIST, -1);

BEGIN
    INSERT INTO TBL_TEMPLOGIN VALUES
     (V_ID);
 
 EXCEPTION
              WHEN ID_EXIST THEN
                  DBMS_OUTPUT.PUT_LINE('중복된 아이디가 존재합니다');
 
 END; 

 

 

 

아까 PK 중복으로 오류번호인 -1과 선언한 EXCEPTION 을 PRAGMA EXCEPTION  인자값으로 넣어주고

EXCEPTION 구문에서 우리가 새로 정의할 출력으로 정의해주면

 

이제 -1번 오류는 우리가 정의한 내용으로 바뀐다.

 

 

 

 

 

 

<참고> SQLPLUS 와 달리 SQL DEVELOPER 의 경우 우리가 정의한 오류메세지가 나오지

않을것이다. 이때는 DEVELOPER의 '보기'- DBMS출력을 선택한후 다음 명령을 입력해준다.

 

SET SERVEROUTPUT on

 

그러면 위의 그림 오른쪽 하단처럼 DBMS 창에 출력값을 보여주기위한것이 on 되였음을 알려주는 메세지가 나올것이다.

그리고나서 다시 같은 ID를 가진 데이터를 입력하려하면 위처럼 우리가 정의한 메세지를 볼수 있다.

 

'오라클 10g' 카테고리의 다른 글

DYNAMIC SQL - 2 [동적 INSERT]  (0) 2010.12.23
DYNAMIC SQL - 1  (0) 2010.12.23
오라클에서 우편번호 넣기   (0) 2010.12.16
오라클에서 우편번호 테이블 연결 방법 1  (0) 2010.12.14
PL/SQL - IN, OUT paramater  (0) 2010.12.14