사용자의 부주의로 시간입력시 문자열 및 특수기호가 들어가는 경우가있어
간단하게 체크 후 변환시켜주는 FUNTION을 만들고있는데 이상한부분이있어 질문드립니다.
CODE버튼에서 입력이안되서 바로올리겠습니다
해당 FUNCTION입니다.(문제있는부분 빨간색상으로 표기해놓겠습니다)
CREATE OR REPLACE FUNCTION FUN_CQI_CONVERSION_DATE (
I_WORD IN VARCHAR2 ,
I_FORMATS IN VARCHAR2 ) RETURN VARCHAR2 IS
--
V_WORD VARCHAR2(20);
V_CHECK CHAR(4) ;
N_LEN NUMBER ;
D_CHECK DATE ;
--
--배열선언
TYPE ARRAY_NUMBER_CHECK IS TABLE OF CHAR(1) INDEX BY BINARY_INTEGER;
ARR_NUMBER ARRAY_NUMBER_CHECK;
ARR_WORD ARRAY_NUMBER_CHECK;
--
BEGIN
V_WORD := LTRIM(RTRIM(I_WORD)) ; -- 좌/우 공백제거
N_LEN := LENGTH(V_WORD) ; -- 문자열 길이
FOR N IN 1..N_LEN LOOP
ARR_NUMBER(N) := 'Y';
IF FUN_ORD_IS_NUMBER(SUBSTR(V_WORD,N,1)) = 'N' OR SUBSTR(V_WORD,N,1) = ' ' THEN
ARR_WORD(N) := SUBSTR(V_WORD,N,1);
ARR_NUMBER(N) := 'N';
END IF;
V_CHECK := V_CHECK||ARR_NUMBER(N); ->디버깅시 바로 이부분인데 처음에 배열1값은 잘들어가는데
배열2부터 안들어가지고 바로 EXCEPTION구문으로 넘어가집니다
END LOOP;
IF N_LEN = 4 THEN
--시간오류시 EX) 9X20 -> 0920으로 변환
IF V_CHECK = 'YNYY' THEN
V_WORD := LPAD(REPLACE(V_WORD,ARR_WORD(2),NULL),N_LEN,'0');
--분오류시 EX) 09X2 -> 0920으로 변환
ELSIF V_CHECK = 'YYNY' THEN
V_WORD := RPAD(REPLACE(V_WORD,ARR_WORD(3),NULL),N_LEN,'0');
END IF;
END IF;
--마지막 DATE CHECK
D_CHECK := TO_DATE(V_WORD, I_FORMATS) ; -- DATE CHECK
RETURN V_WORD;
EXCEPTION
WHEN OTHERS THEN
RETURN 'XXXX';
END FUN_CQI_CONVERSION_DATE;
오라클쪽은 아직 많이부족한초보라 한수 부탁드립니다