예외절 = 오류절
[문법]exception when 익셉션이름1 [or 익셉션이름2] then 실행문장1; 실행문장2; 실행문장3; when 익셉션이름3 [or 익셉션이름4] then 실행문장4; 실행문장5; 실행문장6; when others then 실행문장7; 실행문장8; 실행문장9;
사용자가 정의해주는 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에서작업한것