ORA-01843 : not a valid month 0 5 4,619

by 에모토 [Oracle 에러코드] [2024.12.10 13:55:04]


Synonym VIEW가 있는데요,

VIEW의 최종 SELECT문에는 날짜 형식이 하나도 없고 모두 문자열입니다.

VIEW 생성 스크립트에는 WHERE 조건에 TO_CHAR (컬럼A, 'YYYY-MM-DD)가 있고, 최종 SELECT 문에 주석처리된 TO_CHAR(날짜정제함수(컬럼B), 'YYYY-MM-DD')가 있습니다.

Informatica라는 ETL 툴에서 데이터를 읽으면 계속 ORA-01843 : not a valid month 오류가 나네요

데이터 읽어드릴 때 VIEW 내부에 있는 TO_CHAR 형식이 맞는지 틀리는지도 확인하나요?이유가 뭘까요?

by 마농 [2024.12.10 14:01:37]

어딘가에 문자를 날짜로 형변환하는 곳이 있을 것입니다.
명시적 형변환이든, 묵시적 형변환이든
묵시적 형변환이 발생되는 지점을 찾아 원인을 제거해야 합니다.
지금 주신 정보 만으로는 WHERE 조건에 TO_CHAR 부분이 의심됩니다.
해당 함수에 사용된 컬럼이 혹시 날짜가 아닌 문자 아닐런지요?
날짜가 와야 할 자리에 문자가 오면 자동 형변환이 시도되고
그 때 오류가 날 가능성이 있습니다.

ETL 툴을 통해 읽는다면?
이관 대상 컴럼이 혹시 날짜는 아닐런지요?
문자를 읽어와 날짜에 저장하다가 오류가 날 수 도 있겠네요.


by 에모토 [2024.12.10 15:09:31]

답글 감사합니다.

실제로는 이관 대상 컬럼에 TO_CHAR 날짜 형식이 있어서 저장하다가 ORA-01843: not a valid month 오류가 나나 싶어서 이관 대상 컬럼에서 날짜 형식 컬럼은 주석 처리를 하고 테스트 중인데, 그래도 오류가 나서 문의글을 올렸습니다.

현재로써는 이관 대상컬럼 중 TO_CHAR를 사용한 컬럼은 VIEW의 SELECT 절에서 주석 처리된 상태이고 WHERE 조건은 제가 TO_CHAR를 사용했다고 썼는데 그게 아닌 CREATE_DATE >='2024-01-01'로 되어 있었습니다.

잘 몰라서 그러는데요 VIEW가 Synonym으로 돼 있고, 스크립트에서 사용된 몇몇 테이블은 권한도 없는데 내부적으로 VIEW 스크립트만 보고도 묵시적 형변환을 하는 걸까요?

몰랐던 부분을 배우게 돼서 감사합니다.


by 마농 [2024.12.10 16:01:47]

일단 오류 원인을 찾아야 합니다.
주어진 정보만 보고는 판단하기 어렵습니다.

WHERE create_date >= '2024-01-01'
이 조건에서 사용된 컬럼 create_date 의 자료형이 date 라면?
조건으로 주어진 문자열 '2024-01-01' 은 날짜형으로 자동 형변환 될 것입니다.
자동 형변환 시에는 포멧 지정이 안되니 기본 포멧을 이용하는데.
사용 하는 환경에 따라 기본 포멧이 달라서 오류가 날 수 있습니다.
 


by 에모토 [2024.12.10 16:07:50]

덕분에 해결되었습니다

WHERE 조건에 CREATE_DATE >= TO_DATE('2024-01-01', 'YYYY-MM-DD') 로 명시적으로 처리했더니 정상적으로 완료 되었습니다 

감사드립니다^^


by 마농 [2024.12.10 16:12:02]

Good!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입