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

Joy🌱·2023년 5월 20일
0

🌟 Trouble Shooting

목록 보기
6/17
post-thumbnail

❓ 문제 발생

퇴근 시각을 등록하기 위해 날짜 및 시간 형태를 String으로 보내 오늘 날짜의 출근기록을 조회하여 Entity에 정의해둔 recordEndTime() 생성자 메소드를 통해 update를 시도
👉 ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 오류

👊 1st Try

출퇴근시각은 DB에 Date타입으로 지정되어 있었으나, Entity와 DTO에 다른 팀원분이 미리 Attendance와 관련된 다른 기능을 구현하실 때 Data 타입이 아닌 String 타입으로 선언해둠.
👉 Entity 및 DTO 데이터 타입 변경 실패

👊 2nd Try

String을 Date 타입으로 변경하여 시도했으나, ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 오류 지속

👊 3rd Try

오라클 SQL Developer에서 직접 쿼리문을 작성하며 테스트한 결과, 날짜는 'yyyy-MM-dd', 시간은 "yyyy-MM-dd HH:mm:SS" 형식으로 작성하면 정상적으로 행이 삽입/수정되는 것을 확인
👉 String 형태에서 포맷만 맞춰준 뒤 다시 실행
👉 ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 오류 지속


✅ 해결

계속 다른 방법을 시도하다가, SQL 구문은 정상적으로 실행되는 것에서 아이디어를 얻어 Native Query로 UPDATE 구문 생성 시도

Native query를 사용하여 직접 String 형태를 TO_DATE로 치환하는 구문을 추가하여 해결

/* 퇴근 시각 등록 */
	@Transactional
    @Modifying
    @Query(value="UPDATE TBL_EMP_ATTENDANCE " +
    			 "SET EMP_ATD_END_TIME = TO_DATE(:endTime, 'YYYY-MM-DD HH24:MI:SS') " +
    			 "WHERE EMP_CODE = :empCode " + 
    			 "AND EMP_ATD_DATE >= TO_DATE(:date, 'YYYY-MM-DD') " +
				 "AND EMP_ATD_DATE < TO_DATE(:date, 'YYYY-MM-DD') + 1",
				 nativeQuery = true)
	void updateEndTime(@Param("empCode")Long empCode, @Param("date")String formattedDate, @Param("endTime")String formattedTime);
profile
Tiny little habits make me

0개의 댓글