함수도 안에 어쨌든 실행하는 식 이 들어가니 예외를 발생 할 수 있는 경우가 있기에
함수안에서 나타나는 예외 처리하는 법을 정리 해 보자
밑의 함수는 숫자형태의 문자를 인자로 받아서 숫자로 변환하는 함수임
근데 인자를 숫자형태가 아닌 문자열을 받는다면 에러가 나겠지
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 |