퇴근 시각을 등록하기 위해 날짜 및 시간 형태를 String으로 보내 오늘 날짜의 출근기록을 조회하여 Entity에 정의해둔 recordEndTime() 생성자 메소드를 통해 update를 시도
👉 ORA-01861: 리터럴이 형식 문자열과 일치하지 않음
오류
출퇴근시각은 DB에 Date타입으로 지정되어 있었으나, Entity와 DTO에 다른 팀원분이 미리 Attendance와 관련된 다른 기능을 구현하실 때 Data 타입이 아닌 String 타입으로 선언해둠.
👉 Entity 및 DTO 데이터 타입 변경 실패
String을 Date 타입으로 변경하여 시도했으나, ORA-01861: 리터럴이 형식 문자열과 일치하지 않음
오류 지속
오라클 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);