DATOR


RAISE의 용도? SQL


RAISE는 발생시키다 라는 뜻으로 FUNCTION이나 PROCEDURE를 작성할때 사용하는데
이번 프로젝트에서 FUNCTION을 만들면서 알게된 부분을 정리해본다.

 

PL/SQL 에는 EXCEPTION(예외처리) 기능이 있다.
여기서 RAISE는 EXCEPTION을 발생시키는 구문이다.

 

몇가지 사용방법을 알아보자.

PL/SQL 구문중에 내가 의도적으로 EXCEPTION을 발생 시키려고 할때 다음과 같이 작성하면 해당 EXCEPTION으로 이동한다.

 

IF I_GUBUN = 0 THEN
   ...
ELSIF I_GUBUN = 1 THEN
   ...
ELSIF I_GUBUN = 2 THEN
   ...
ELSE
           RAISE NO_DATA_FOUND;
END

 

EXCEPTION 구문에서
WHEN THEN 문장으로 몇가지 미리 지정된 EXCEPTION을
사용할수 있는데 OTHERS는 모든 EXCEPTION을 잡을 수 있다.

 

그렇기 때문에 순서가 중요한데 OTHERS는 EXCEPTION절에 맨 마지막에 와야한다.
순서가 바뀌면 CREATE 시 오류가 난다.

 

FUNCTION 수행중에 ERROR가 발생해도 EXCEPTION이 수행됐다면 ERROR를 발생시키지 않는다.
그렇기 때문에 다음과 같이 RAISE를 명시해주면
EXCEPTION에서 오류를 발생시킬수 있다.

 

다음 문장을 보자.

WHEN NO_DATA_FOUND THEN
       V_ERR_MSG :=  SQLCODE|| ' : ' ||SQLERRM ;
       
        INSERT INTO ERROR(WORK_DATE,ERR_MSG)
        VALUES(SYSDATE,V_ERR_MSG);
        COMMIT;
        RAISE;
       
RAISE 구문이 없으면 ERROR 테이블의 오류사항만 입력하고 ERROR를 발생시키지 않는다.

RAISE 구문을 넣음으로써 외부로 ERROR를 발생킨다.

 

용도에 따라 RAISE 구문을 적절히 사용해 보자.

사용자가 특정한 ERROR를 발생시키고 싶을때는 다음문장을 활용하자.

 

IF I_GUBUN = 0 THEN
   ...
ELSIF I_GUBUN = 1 THEN
   ...
ELSIF I_GUBUN = 2 THEN
   ...
ELSE
             RAISE_APPLICATION_ERROR(-20001,'해당 구분이 없습니다.');
END

 

기존 지정된 오라클 ERROR코드를 제외한 -20,000 ~ -20,999 까지 사용가능하고,
ERROR코드와 문자열을 ERROR로 발생시킬 수 있다.

Tag :

Leave Comments