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