본문 바로가기
IT 이야기/데이터베이스

갑자기 쿼리가 동작하지 않을 때 확인사항 : DB 묵시적 형변환

by youngmap 2021. 12. 28.
반응형

 

어느 날 갑자기 운영시스템(운영DB - Oracle)에서 잘 돌아가는 쿼리가 동일한 환경의 개발시스템(개발DB)에서 돌아가지 않는 현상이 발견되었다.

 

쿼리를 요약하자면 아래와 같은 단순한 조회 쿼리고 ID 컬럼의 데이터형은 VARCHAR2 였다.

 

<오류 발생>

SELECT *
FROM A
WHERE ID = 1234

일단 문자형 칼럼을 숫자로 조회한다는 건 잘못된 것이 분명하다.

 

하지만 그동안 시스템에서 잘 돌아가던 쿼리가 갑자기 안 돌아가는 현상은 무엇 때문일까?

그 이유는 묵시적(암시적) 형변환 때문이다.

 

문자열 칼럼을 숫자로 조회하면 해당 칼럼의 데이터들을 숫자로 묵시적 형 변환 후 비교하게 된다.

ID 칼럼에는 그동안 모두 숫자로 변환 가능한 데이터만을 취급했는데 갑자기 문자 데이터가 들어오게 된 것이다.

그 순간부터 해당 쿼리는 동작하지 않고 "ORA-01722: 수치가 부적합합니다" 라는 오류 메시지를 리턴하게 된다.

 

데이터 이슈로 문자를 숫자로 형 변환 실패되어 오류가 발생한 케이스다.

반드시 문자는 문자로 숫자는 숫자로 조회하는 것이 성능과 오류 예방 측면에서 옳은 일임을 기억하다.

 

 

<조치>

SELECT *
FROM A
WHERE ID = '1234'

 

반응형