SQL
제어문(IF문)
에어팟맥스
2022. 7. 13. 17:16
※ 형식
if 조건1 then 실행문장1;
elsif 조건2 then 실행문장2;
elsif 조건3 then 실행문장3;
else 실행문장4;
end if;
-- 나이 구하는 함수
-- 앞에서 만들었던 func_age 함수는 완벽하지 않음
select func_age_2('9007131234567')
from dual; -- 33
select func_age_2('abcdefghij')
from dual;
-- ORA-06502: PL/SQL: 수치 또는 값 오류: 문자를 숫자로 변환하는데 오류입니다
select func_age_2('9007139234567')
from dual; -- -67
[ func_age 수정 ]
create or replace function func_age_2
(p_jubun IN varchar2)
return number
is
v_age number(3);
v_year number(4);
v_gender_number varchar2(1) := substr(p_jubun, 7, 1);
error_jubun EXCEPTION; -- error_jubun 은 사용자가 정의하는 예외절(Exception) 임을 선언한다.
begin
if v_gender_number in ('1','2') then v_year := 1900;
elsif v_gender_number in ('3','4') then v_year := 2000;
else RAISE error_jubun; -- error_jubun 은 사용자가 정의하는 예외절(Exception)이다.
end if;
v_age := extract(year from sysdate) - ( to_number(substr(p_jubun, 1, 2)) + v_year ) + 1;
return v_age;
EXCEPTION
WHEN error_jubun THEN
RAISE_APPLICATION_ERROR( -20001, '>> 주민번호의 성별은 1,2,3,4 중에 하나로 입력해야 합니다. <<');
-- -20001 ~ -20999
-- -20001 은 오류번호로써, 사용자가 정의해주는 EXCEPTION 에 대해서는 오류번호를 -20001 부터 -20999 까지만 사용하도록 오라클에서 비워두었다.
WHEN others THEN
RAISE_APPLICATION_ERROR( -20002, '>> 올바른 주민번호가 아닙니다. <<');
end func_age_2;
-- Function FUNC_AGE_2이(가) 컴파일되었습니다.
[ 결과 ]
select func_age_2('9007131234567')
from dual; -- 33
select func_age_2('abcdef2ghij')
from dual;
-- ORA-20002: >> 올바른 주민번호가 아닙니다. <<
select func_age_2('9007139234567')
from dual;
-- ORA-20001: >> 주민번호의 성별은 1,2,3,4 중에 하나로 입력해야 합니다. <<