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');

 

반응형