IT 이야기
갑자기 쿼리가 동작하지 않을 때 확인사항 : DB 묵시적 형변환
youngmap
2021. 12. 28. 15:35
반응형

어느 날 갑자기 운영시스템(운영DB - Oracle)에서 잘 돌아가는 쿼리가 동일한 환경의 개발시스템(개발DB)에서 돌아가지 않는 현상이 발견되었다.
쿼리를 요약하자면 아래와 같은 단순한 조회 쿼리고 ID 컬럼의 데이터형은 VARCHAR2 였다.
<오류 발생>
SELECT *
FROM A
WHERE ID = 1234
일단 문자형 칼럼을 숫자로 조회한다는 건 잘못된 것이 분명하다.
하지만 그동안 시스템에서 잘 돌아가던 쿼리가 갑자기 안 돌아가는 현상은 무엇 때문일까?
그 이유는 묵시적(암시적) 형변환 때문이다.
문자열 칼럼을 숫자로 조회하면 해당 칼럼의 데이터들을 숫자로 묵시적 형 변환 후 비교하게 된다.
ID 칼럼에는 그동안 모두 숫자로 변환 가능한 데이터만을 취급했는데 갑자기 문자 데이터가 들어오게 된 것이다.
그 순간부터 해당 쿼리는 동작하지 않고 "ORA-01722: 수치가 부적합합니다" 라는 오류 메시지를 리턴하게 된다.
데이터 이슈로 문자를 숫자로 형 변환 실패되어 오류가 발생한 케이스다.
반드시 문자는 문자로 숫자는 숫자로 조회하는 것이 성능과 오류 예방 측면에서 옳은 일임을 기억하다.
<조치>
SELECT *
FROM A
WHERE ID = '1234'
반응형