ORA-01843: 지정한 월이 부적합합니다.
ORA-01843: 지정한 월이 부적합합니다.
프로그램을 통해서 데이타를 insert 또는 update 하는 경우에
문자열을 입력받아서 날짜 형태로 저장을 할 때 발생.
UPDATE 테이블 명
SET 필드명 =TO_DATE( '2019-04-17 16:00' /**P*/,'YYYYMMDDHH24MISS')
WHERE SEQ =1 ;
이 오류의 원인은 NLS_DATE_FORMAT이 맞지 않아서 생기는 오류 이다.
필드명의 타입이 DATE 이므로 TO_DATE를 써서 DATE형태로 변환헤서 DATA를 넣을려고 하는 경우에 발생함.
--> 이 경우 오라클 설정의 NLS_DATE_FORMAT 값 등을 확인해서 조치를 하는 것이 좋을 것으로 보이지만.
내 경우에는 필드타입을 VARCHAR2 로 만들어버리는 선택을 하였다.
그 이유는 개발환경의 NLS_DATE_FORMAT 설정값과 운영 환경의 NLS_DATE_FORMAT 설정값이 다르기 때문에 개발에서 맞춰놓으면 운영에서 문제가 발생하기 때문이다.
또한 VARCHAR2로 변경을 한다고 해서 문제가 생길만한 이유가 없기 때문이기도 하다.
--> 오라클 상에서 DATE 타입의 필드명을 바로 VARCHAR2로 변환이 안되므로
필드를 생성해서 데이타를 모두 넣은 다음에 이름을 바꿔주는 방법으로 진행을 하였다.
--> 이 경우 XML 상에서 쿼리에서 날짜를 비교해서도 수정을 해줘야 하는데
내가 쓰는 날짜의 기본형이 TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') 인데..
데이타를 이 형태로 저장을 해놓았다. 그리하여 날짜를 비교할 때는 아래와 같이 사용을 하고 있다.
WHERE 필드명 > TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')