[Oracle] 개발 중 만난 여러 가지 에러들
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