반응형
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');
반응형
'DB > Oracle' 카테고리의 다른 글
[Oracle] ORDER BY 및 ROWNUM 사용 시 유의점 (0) | 2021.04.20 |
---|---|
[SQL] prepareStatement 주의점 (0) | 2021.04.14 |
[iBatis, myBatis] 변수 사용 시, ##과 $$ 차이점 (0) | 2021.02.15 |
[Oracle] case when ~ then ~ 사용 방법 (0) | 2021.02.14 |
[Oracle] 계정 생성 및 권한 부여 방법 (2) | 2021.02.13 |