'ORA-01722: 수치가 부적합합니다' 오류는 입력을 시도하려는 데이터가 유효하지 않은 숫자 형식일 때에 발생합니다. 간단한 예제를 살펴보며 해결 방법에 대해 알아보도록 합시다~
DELETE FROM emp WHERE ename = 0;
ERROR at line 1:
ORA-01722: invalid number
위의 예시 쿼리는 사원이름 컬럼 'ename'이 0(숫자)인 사원을 삭제하려고 했는데, 'ORA-01722: invalid number' 오류와 함께 처리를 실패하였습니다. 왜냐 하면 다음과 같이 해당 컬럼은 10의 크기를 가지고 있는 가변문자길이형 데이터이기 때문이랍니다.
SELECT DATA_TYPE, DATA_LENGTH FROM ALL_TAB_COLUMNS WHERE COLUMN_NAME = 'ENAME';
DATA_TYPE DATA_LENGTH
--------- -----------
VARCHAR2 10
이 경우, 'ename' 컬럼을 숫자로 비교하려고 시도하였기에 문제가 발생합니다. 이 컬럼은 문자열로 저장되어 있기 때문에 이를 해결하기 위해서는, 올바른 데이터 유형으로 변경하여 비교해야 합니다.
예를 들어, 다음과 같이 쿼리를 수정하여 해결할 수 있습니다. 이번 예제에서는 문자열만 비교했는데요, 주로 날짜 형식을 잘못 입력하여 발생하는 경우가 많습니다!
DELETE FROM emp WHERE ename = 'BEOMSANG';
1 rows deleted.