1. 날짜 컬럼의 타입이 DATE가 아닌 CHAR 또는 VARCHAR2 인 경우 어플리케이션 버그로 인해 정상적인
날짜값이 아닌 문자나 공백 등이 입력될 수 있어 향후 관리나 통계추출에 영향을 미칠 수 있습니다.
관련하여 기 입력된 날짜값이 정상적인 데이터인지 아니면 비정상적인 데이터인지 검증을 해야 하는데
아래와 같이 날짜체크 함수를 이용하면 쉽게 검증이 가능합니다.
# 함수 소스
CREATE OR REPLACE FUNCTION FN_CHECK_DATE(str_date VARCHAR2) RETURN VARCHAR2
AS
RTN VARCHAR(5) := 'TRUE';
DUMMY DATE;
strTEMP VARCHAR(8);
BEGIN
strTEMP := TRIM(str_date);
IF strTEMP IS NOT NULL THEN
SELECT TO_DATE(strTEMP)
INTO DUMMY
FROM DUAL;
RETURN RTN;
ELSE
RTN := 'NULL';
RETURN RTN;
END IF;
EXCEPTION
WHEN OTHERS THEN RTN := 'FALSE';
RETURN RTN;
END;
# 샘플 예제
select FN_CHECK_DATE('20110923') COL1,
FN_CHECK_DATE('20110000') COL2,
FN_CHECK_DATE('문자') COL3,
FN_CHECK_DATE('문자') COL4,
FN_CHECK_DATE(NULL) COL5,
FN_CHECK_DATE('') COL6,
FN_CHECK_DATE(' ') COL7
from dual;
Col1 Col2 Col3 Col4 Col5 Col6 Col7
------------------------------------------------
TRUE FALSE FALSE FALSE NULL NULL NULL
2. 날짜 컬럼의 타입을 DATE 로 지정하는게 가장 쉬운 해결책이지만,
이미 CHAR 또는 VARCHAR2 를 방대하게 사용하고 있어 스키마 수정이 여의치 않을때 아래와 같은 방법을 추천합니다.
날짜체크 함수를 통해 기 입력된 데이터의 검증 및 보정을 하고 스키마 단에서 다음과 같이 제약조건을
추가하면 향후에 어플리케이션 또는 작업자 실수에 의해 비정상적인 날짜값이 입력되는 것을 사전에 방지할 수 있습니다.
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 CHECK
(컬럼명=to_char(to_date(컬럼명,'YYYYMMDD'),'YYYYMMDD'));
'::: DB ::: > Oracle' 카테고리의 다른 글
ORA-12012: error on auto execute of job ORA-00257: archiver error (0) | 2011.09.21 |
---|---|
복구의 기초 - startup 단계를 먼저 알자 (0) | 2011.09.20 |
DBMS_CRYPTO를 이용한 AES256 알고리즘 암호화/복호화 (0) | 2011.09.06 |
DBMS_CRYPTO를 이용한 암호화/복호화 (1) | 2011.09.06 |
DBMS_OBFUSCATION_TOOLKIT 의 암호화/복호화 (0) | 2011.09.05 |