DB/Oracle
[Oracle] ORA-01861: 리터럴이 형식 문자열과 일치하지 않음
멍목
2021. 3. 3. 22:04
반응형
Oracle에서 Insert문 or Select문을 칠 때 가끔 이러한 오류가 일어납니다.
이 오류의 원인은 문자열과 날짜타입을 비교 혹은 데이터로 넣으려고 해서 발생하는 오류입니다.
아래의 예를 통해 원인을 파악하고 해결방법을 알아보겠습니다. (SELECT 문도 동일하게 적용됩니다.)
1. 샘플 테이블
CREATE TABLE SAMPLE_TB
(
DATE_COLUMN DATE,
VARCHAR2_COLUMN VARCHAR2(20)
);
2. DATE 형식의 컬럼에 문자열 데이터를 넣는 경우
-- 오류 발생 : 리터럴이 형식 문자열과 일치하지 않음
-- 원인 : 문자열을 DATE형식의 컬럼에 넣으려고 해서 발생
INSERT
INTO SAMPLE_TB (DATE_COLUMN)
VALUES ('2021-03-03 21:55:55');
-- 해결방법 : 문자열을 TO_DATE 함수를 이용해 DATE형식으로 변환하여 INSERT (정상적으로 처리)
INSERT
INTO SAMPLE_TB (DATE_COLUMN)
VALUES TO_DATE(('2021-03-03 21:55:55'), 'YYYY-MM-DD HH24:MI:SS');
3. VARCHAR2 형식의 컬럼에 DATE타입의 데이터를 넣는 경우
-- 오류 발생 : 리터럴이 형식 문자열과 일치하지 않음
-- DATE타입의 데이터를 VARCHAR2 컬럼에 넣으려 해서 발생
INSERT
INTO SAMPLE_TB (VARCHAR2_COLUMN)
VALUES (SYSDATE);
-- 해결 방법 : 문자열을 TO_CHAR 함수를 이용해 문자열 형식으로 변환하여 INSERT (정상적으로 처리)
INSERT
INTO SAMPLE_TB (VARCHAR2_COLUMN)
VALUES TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS');
반응형