전공과 전혀 관련없는 전산직에 일하게 됐는데요 ^^;
날짜를 입력받고 정상적인 날짜 형식인지 체크하는 함수를 만들고 있습니다.
이정도까지는 했는데 뭔가 복잡하고 부족합니다. ^^; 조언 좀 부탁드리고 싶습니다!
create or replace
FUNCTION FN_DAY_CHK_1 ( I_DAY IN VARCHAR2 )
RETURN NUMBER
IS
V_DAY NUMBER;
V_LEN NUMBER;
V_MM VARCHAR2(2);
V_DD VARCHAR2(2);
BEGIN
-- 공백 체크
IF NVL(I_DAY, ' ') = ' ' THEN
RETURN -1;
END IF;
V_LEN := LENGTH(I_DAY);
-- 월 체크
V_MM := SUBSTR(I_DAY, 5, 2);
IF (TO_NUMBER(V_MM) > 12) THEN
RETURN -2;
END IF;
-- 일 체크
V_DD := SUBSTR(I_DAY, 7, 2);
IF (TO_NUMBER(V_DD) > 31) THEN
RETURN -3;
END IF;
-- 윤달인 해에 29일 넘겼을 때
IF ((MOD(SUBSTR(I_DAY, 1, 4), 4) = 0 AND MOD(SUBSTR(I_DAY, 1, 4), 100) <> 0)
OR MOD(SUBSTR(I_DAY,1,4),400)=0)
AND SUBSTR(I_DAY,5,2) = 02
AND SUBSTR(I_DAY,7,2) > 29 THEN
RETURN -4;
END IF;
-- 윤달이 아닌 해에 28일 넘겼을 때
IF MOD(SUBSTR(I_DAY, 1, 4), 4) <> 0
AND SUBSTR(I_DAY, 5, 2) = 02
AND SUBSTR(I_DAY, 7, 2) > 28 THEN
RETURN -5;
END IF;
-- 에러없이 8자리인 경우
IF V_LEN = 8 THEN
RETURN 0;
END IF;
-- 8자리가 아닌 경우
IF V_LEN <> 8 THEN
RETURN -6;
END IF;
EXCEPTION
WHEN OTHERS THEN
RETURN -7;
END;
create or replace
FUNCTION FN_DAY_CHK_1 ( I_DAY IN VARCHAR2 )
RETURN String
IS
BEGIN
/*변환에 성공하면 1이 리턴되고 실패하면 에러 예외가 발생되며 에러 메세지 출력*/
select to_Date(relpace(I_DAY ,' ',''),'mmdd') from dual;
return 1;
EXCEPTION
WHEN OTHERS THEN
RETURN SQLERRM;
END;