Exception 정의 내리기(함수 사용)

양혜정·2024년 3월 25일

Oracle

목록 보기
45/49

사용자 정의 예외절(Exception)

예외절 = 오류절
[문법]

exception
	when 익셉션이름1 [or 익셉션이름2] then
    	실행문장1;
        실행문장2;
        실행문장3;
    when 익셉션이름3 [or 익셉션이름4] then
   		실행문장4;
        실행문장5;
        실행문장6;
    when others then
    	실행문장7;
        실행문장8;
        실행문장9;

Exception 정의내리기

사용자가 정의해주는 Exception 에 대해서는 오류번호 -200001 ~ -20999 까지 가능

Exception
WHEN error_insert THEN raise_application_error
											(오류번호, '하고 싶은말');

잘못된 주민번호를 작성한 경우(함수사용시)

create or replace function func_age_3
    (p_jubun IN varchar2)
    return number
IS
    error_jubun  exception; 
    -- error_jubun은 개발자가 정의하는 exception(예외절)임을 선언
    v_gender_num varchar2(1) := substr(p_jubun,7,1); 
    -- := 초기값을 넣어주는 것

    v_year       number(4);
    v_age        number(3);
BEGIN
    if length(p_jubun) != 13 then raise error_jubun;
    end if;

    if    v_gender_num in ('1','2') then v_year := 1900;
    elsif v_gender_num in ('3','4') then v_year := 2000;
    else raise error_jubun;
    end if;

    if to_date(to_char(sysdate,'yyyy')||substr(p_jubun,3,4)
    		,'yyyymmdd') - to_date(to_char(sysdate,'yyyymmdd')
            ,'yyyymmdd') > 0
         then v_age := extract(year from sysdate) 
         		- (v_year + to_number(substr(p_jubun,1,2))) - 1;
    	 else v_age := extract(year from sysdate) 
         		- (v_year + to_number(substr(p_jubun,1,2)));
    	 end if;

    return v_age;

EXCEPTION
WHEN error_jubun
THEN raise_application_error(-20001, '잘못된 주민등록 번호입니다.'); 
-- raise_application_error() 는 dbms가 
--					아닌 스크립트 출력창에 오류를 띄워준다.             
END func_age_3;

정리

-> local_hr에서작업한것

0개의 댓글