[오라클] IF문

심심이·2024년 3월 4일

oracle

목록 보기
30/40

문법

/*
   ※ 형식
   
   if     조건1  then  실행문장1;
   elsif  조건2  then  실행문장2;
   elsif  조건3  then  실행문장3;
   else               실행문장4;
   end if; -- 반드시 end if를 넣어야 함. !! 
   
*/

실습

   
create or replace function func_age_3 (p_jubun in varchar2)
return number
is
    error_jubun exception;
    v_gender_num varchar2(1) := substr(p_jubun, 7, 1);
        -- v_gender_num에는 입력받은 p_jubun에서 7번째부터 1개글자만 넣어준다.
        -- 즉, v_gender_num에는 '1' 또는 '2' 또는 '3' 또는 '4'가 들어올 것이다.
    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;  -- error_jubun은 사용자가 정의하는 예외절(Exception)이다.
    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, '>> 올바르지 않은 주민번호입니다. <<'); 
          -- -20001 은 오류번호로써, 사용자가 정의해주는 EXCEPTION 에 대해서는 오류번호를 -20001 부터 -20999 까지만 사용하도록 오라클에서 비워두었다.
end func_age_3;


profile
개발하는 심심이

0개의 댓글