ora-01722 에러 원인에 대해서 알아보고 그 해결 방법을 안내드리겠습니다. 해당 오류코드는 오라클 로그를 확인해보면 수치가 부적합하다는 내용을 확인하실 수 있으실 겁니다. 문자열을 숫자로 변환하려고 할 때 발생하는데요. 예시와 함께 알아보겠습니다.
1. to_number 함수를 사용하는 경우
ora-01722 코드에 대해서 2가지 예제를 통해서 어떤 경우에 발생 하는지 확인해볼까요? 먼저 to_number 함수를 사용하는 경우입니다. to_number는 오라클에서 많이 사용하는 함수 중에 하나인데요. 예를 들어서 select to_number('8,500,000') from 테이블명; 이렇게 숫자로 변환하려는 대상에 문자가 포함되어있으면 에러가 발생하게 되죠.
숫자는 0~9 , + / - 구성이 되어야함
위에 보여드린 예제에서의 오류는 숫자로 변환하려는 대상에 콤마가 들어가 있어서 오류가 발생한 경우입니다. 즉, ora-01722 에러는 숫자로 변환하려는 대상에 문자가 포함되어있는 경우에 발생하게 되죠. 위에서 콤마를 제거해주시면 정상 실행을 확인하실 수 있습니다.
2. 묵시적 형 변환 시 발생
ora-01722 오류 두 번째는 묵시적 형 변환 시 발생합니다. 예를 들어서 설명드려보겠습니다. select 'qwe' - 100 from 테이블명; 이런 쿼리문이 있다고 했을 때, 실행을 하게 되면 오류가 납니다. 왜냐하면 qwe 가 문자열인데 숫자와 사칙연산을 시도하게 되면서 묵시적 형 변환이 일어나게 되면서 오류가 생기죠.
명시적 형 변환을 사용하자
쿼리가 짧은 경우에는 괜찮지만, 쿼리가 길어지게 되면 찾기도 어려운 경우가 많습니다. 위에 설명드린 묵시적 형 변환보다는 명시적 형변화를 사용해서 ora-01722 오류를 사전에 방지하는 것이 좋겠습니다. varchar 형의 데이터 타입을 사용할 때는 to_char 형태로 정확하게 명시적으로 선언을 해주고 사용해야 다른 사람이 쿼리를 볼 때도 명확하게 전달이 되죠.
명시적 형변환 예제
select * from test where substr(biz_no, 1, 2) = '33'; 해당 쿼리문은 ora-01722 오류가 발생합니다. 33을 묵시적으로 숫자형으로 변환이 일어나면서 발생하게 되죠. 이때는 to_char(33)라고 33에 명시적으로 형 변환을 해주시면 해결이 가능합니다.
오늘은 ora-01722 오류코드 해결방법을 안내드렸는데요. 쿼리문이 길어지는 경우에 찾기가 어려우실 수도 있습니다. 가급적이면 데이터 타입에 맞게 쿼리를 잘 작성하시고, 특히 숫자와 문자열을 혼용해서 사용해야 하는 경우에 명시적 형 변환을 이용해서 사용을 해주세요. 위의 내용으로 해결이 한 번에 되셨으면 좋겠습니다. 긴 글 읽어주셔서 감사합니다.
댓글