[ORACLE] 오라클 함수 Exception 처리 방법 (오라클 try catch exception)
오라클 함수(Oracle Function)도 자바의 try ~ catch 구문과 같은 처리가 가능할까?
오라클 함수를 실행했을 때 SELECT 한 결과 ROW 가 존재하지 않을 경우,
EXCEPTION 이 발생하고 오라클 함수는 null 을 리턴한다.
예를 들어 다음 함수를 보자.
|
CREATE OR REPLACE FUNCTION get_something ( |
위 함수의 의도는 (마지막 부분을 보면 알겠지만)
결과값이 없을 경우(retVal IS NULL OR retVal = ”) 기본값을 리턴하려고 한다.
하지만, 그 의도대로 동작하지 않으며 함수는 null을 리턴한다.
결과 데이터가 없어서(NO_DATA_FOUND) EXCEPTION 이 발생했기 때문이다.
실제로 SELECT get_something(”, ”) FROM DUAL; 을 실행해보면 null이 나온다.
이러한 NO_DATA_FOUND 익셉션을 회피하기 위해서는, 다음과 같이 BEGIN ~ EXCEPTION ~ END; 구문을 사용하면 된다.
|
CREATE OR REPLACE FUNCTION get_something ( |
이번에는 SELECT get_something(”, ”) FROM DUAL; 을 실행해보면 리턴값으로 문자열 ‘default’ 가 나온다.
실제 업무에서는 디폴트 값을 돌려주기 보다,
BEGIN ~ EXCEPTION ~ END; 구문을 여러 번 반복해서 원하는 값을 찾을 때까지 SELECT하는 코드를 많이 사용한다.
참고로, NO_DATA_FOUND 뿐 아니라 모든 EXCEPTION 을 커버하기 위해서는, 아래와 같이 WHEN OTHERS THEN 을 사용하면 된다.
|
BEGIN |