프로젝트 기록/DBMS

[Oracle] 개발 중 만난 여러 가지 에러들

clean01 2025. 4. 20. 15:03

java + mybatis(또는 ibatis)로 개발을 하면서 여러가지 oracle 에러를 봤었는데, 그것들을 정리해보고자 한다.

 

 


ORA-01861: 리터럴이 형식 문자열과 일치하지 않음

주로 DATE 타입에 String을 넣거나 DATE와 String을 비교하려 할때 발생

String을 TO_DATE를 통해 DATE 타입으로 변환시키거나

DATE를 TO_CHAR를 통해 String 타입으로 변환시키면 된다.

주의할 점은 String이 '2025/04/18'이라면 TO_DATE('2025/04/18', 'YYYY/MM/DD') 이런식으로 형식을 정확히 맞춰 주어야 함

 

 

 


ORA-30554: 기본함수 ~~ 인덱스가 사용 안함으로 설정 되었습니다.

function-based index가 비활성화 되어있을 때 발생.

 

아래와 같은 alter문으로 인덱스를 비활성화 할 수 있는데

인덱스를 비활성화하면 인덱스를 사용하지 않으며, dml 작업(update, insert) 작업을 할 수가 없다.

ALTER INDEX [스키마명.인덱스명] UNUSABLE

 

 

함수 기반 인덱스에 대한 내용은 아래 블로그 포스팅을 참고해주세요!

https://onfonf.tistory.com/124

 

[Oracle] 함수 기반 인덱스란?

함수 기반 인덱스란?함수 기반 인덱스는 인덱스 생성 시 함수의 결과를 가지고 인덱스를 생성하는 방식을 의미한다.원래는 쿼리 where 절에 인덱스된 열에 함수를 실행하면 인덱스가 사용되지 않

onfonf.tistory.com

 

 

 

ORA-30554는 비활성화된 함수 기반 인덱스가 있는데 DML문을 실행할 때, 값을 추가하거나 변경할 수 없다고 알리는 에러로, 인덱스를 지우거나 리빌드(재사용)처리 함으로써 해결 가능하다.

ALTER INDEX [스키마명.인덱스명] REBUILD -- 인덱스 리빌드
DROP INDEX [스키마명.인덱스명] -- 인덱스 삭제

 

 


ORA-01830: 날짜 형식의 지정에 불필요한 데이터가 포함되어있습니다.

TO_DATE() 시에 형식을 제대로 맞춰주지 않아 생기는 문제.

 

예를 들면 자바 코드에서 String타입 변수 regDate에 “20250418 12:30:29”라는 값이 들어있다고 치자.

그런데 ibatis 쿼리에서는

.. 생략
WHERE REG_DATE = TO_DATE(regDate, 'YYYY/MM/DD')

이런 식으로 시간 데이터가 들어가 있지 않거나 하는 등 형식이 안맞는 경우에 발생한다.

즉, String과 뒤에 형식을 정확하게 맞춰주어야함.

 

 

위의 경우, 아래와 같이 바꿔주거나

.. 생략
WHERE REG_DATE = TO_DATE(regDate, 'YYYY/MM/DD hh24:mi:ss')

 

 

아래 자바 코드처럼 뒤에 시간 부분을 잘라 줌으로써 해결 가능하다.

String trunRegDate = regDate.split(" ")[0];

 

 


Reference

https://developing-move.tistory.com/21

https://www.oraexcel.com/oracle-10gR2-ORA-30554/lang-ko

https://itprogramming119.tistory.com/entry/Oracle-Error-ORA-01830-date-format-picture-ends-before-converting-entire-input-string

https://mystyle70024.tistory.com/10

https://gent.tistory.com/417