함수도 안에 어쨌든 실행하는 식 이 들어가니 예외를 발생 할 수 있는 경우가 있기에

함수안에서 나타나는 예외 처리하는 법을 정리 해 보자

 

밑의 함수는 숫자형태의 문자를 인자로 받아서  숫자로 변환하는 함수임

근데 인자를 숫자형태가 아닌 문자열을 받는다면 에러가 나겠지

SELECT TO_NOMBER('10A')+10 FROM DUAL; 

요런거 요거 숫자로 변환 안되잖어  에러나잖어

고거 처리하는 과정임

 

오라클의 경우 특이한게 리턴값을 두 번 넣을 수 있음 아니 예외 처리 하면은 무조건 두 번 넣어야 함

제대로 인자를 받았을 때 반환되는 리턴값 한 개

그리고 예외가 발생했을 때 예외처리부로 바로 넘어가다 보니 그 예외부안에서 반환되는 리턴값 한 개

그래서 총 2개가 필요함!!

 

create or REPLACE FUNCTION execeptionfunc(value NVARCHAR2)
        RETURN NVARCHAR2
IS
        toNumber NUMBER;      
BEGIN
             --'10A'전달 시 
        SELECT TO_NUMBER(value) INTO toNumber FROM DUAL;  
           --이 때 10으로 변환 되네? INTO로 들어가서 숫자로 담을 때 A를 빼고 숫자만 반환해서 가능하대.. 당황스럽다,,,
        SELECT VALUE INTO toNumber FROM DUAL;  -- 이때는 INVALID NUMBER 에러
              RETURN toNumber;  --- >이 리턴은 제대로 된 값이 입력 됐을 때의 리턴
              
        
      EXCEPTION  --- 예외 처리부는 항상 마지막!  정상리턴 보다도 마지막에!!
           WHEN OTHERS THEN
                -- DBMS_OUTPUT.PUT_LINE('숫자형식이 아닙니다');     --- 이거 없어도 되넹?
                  RETURN '숫자형식이 아닙니다' ;  -- 오라클 함수는 무조건 리턴이 있어야해서 여기서도 리턴이 필요
                          ---> 이 리턴은 예외부 로들어왔을 때의 리턴!!!         
END;
/

실행 해 보면

SELECT execeptionfunc('10A') FROM DUAL;    => 10 출력

SELECT execeptionfunc('a10Ab') FROM DUAL;   =>숫자형식이 아닙니다 출력

 

'학원 > DB(오라클),SQL문' 카테고리의 다른 글

10/21 26-3 TRIGGER🔫  (0) 2022.10.21
10/21 26-2 Procedure  (0) 2022.10.21
10/20 25-7 [SUBPROGRAM] FUNCTION  (0) 2022.10.20
10/20 25-6 CURSOR  (2) 2022.10.20
10/20 25-5 오라클 내장 함수 (수학관련)  (0) 2022.10.20

+ Recent posts