[pl/sql] 날짜 유효성 검사

입력된 날짜의 유효성을 exception 처리를 통해 검사한다.
CREATE OR REPLACE FUNCTION FUNCTION_TEST(
    PI_STR_YMD   IN   VARCHAR2)
    RETURN VARCHAR2
IS
    L_YMD             DATE;
    PO_ERRMSG         VARCHAR2(400);
    E_INVALID_MONTH   EXCEPTION;
    E_INVALID_DAY     EXCEPTION;
    PRAGMA EXCEPTION_INIT(E_INVALID_MONTH, -1843);
    PRAGMA EXCEPTION_INIT(E_INVALID_DAY, -1847);
BEGIN
    BEGIN
        L_YMD    := TO_DATE(PI_STR_YMD, 'YYYYMMDD');
    EXCEPTION
        WHEN E_INVALID_MONTH THEN
            PO_ERRMSG    := '월이 맞지 않습니다.';
            RETURN PO_ERRMSG;
        WHEN E_INVALID_DAY THEN
            PO_ERRMSG    := '일이 맞지 않습니다.';
            RETURN PO_ERRMSG;
        WHEN OTHERS THEN
            PO_ERRMSG    := '입력된 날짜가 뭔가 이상합니다.';
            RETURN PO_ERRMSG;
    END;

    PO_ERRMSG    := '유효한 날짜입니다.';
    RETURN PO_ERRMSG;
END;
/

-- 결과 확인
SELECT '20152001' YMD, FUNCTION_TEST('20152001') RESULT
  FROM DUAL
UNION ALL
SELECT '20150132' YMD, FUNCTION_TEST('20150132') RESULT
  FROM DUAL
UNION ALL
SELECT '10001131' YMD, FUNCTION_TEST('10001131') RESULT
  FROM DUAL;

YMD      RESULT                                            
-------- --------------------------------------------------
20152001 월이 맞지 않습니다.                               
20150132 일이 맞지 않습니다.                               
10001131 입력된 날짜가 뭔가 이상합니다.                    


3 rows selected.

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다