본문 바로가기
ORACLE

ORA-01722: 수치가 부적합합니다

by samie 2025. 3. 26.

ORA-01722 오류란?

오라클(Oracle) 데이터베이스를 사용하다 보면 ORA-01722: 수치가 부적합합니다 (ORA-01722: invalid number) 오류를 만날 수 있습니다. 이 오류는 문자열 데이터를 숫자로 변환할 때 발생하는 대표적인 오류 중 하나입니다.

ORA-01722 오류 발생 원인

  • 숫자 형식이 아닌 값을 숫자 데이터 타입과 비교할 때
  • 숫자로 변환할 수 없는 문자열을 TO_NUMBER 함수로 변환할 때
  • 숫자 컬럼에 문자열 값을 삽입하려고 할 때
  • 암시적 데이터 형 변환이 발생할 때

ORA-01722 오류 발생 예제

1. WHERE 절에서 숫자 컬럼과 문자열 비교

SELECT * FROM employees WHERE employee_id = 'ABC';

2. TO_NUMBER 함수로 변환 불가능한 값 처리

SELECT TO_NUMBER('ABC') FROM dual;

3. 문자열이 포함된 컬럼에서 암시적 변환 오류 발생

SELECT * FROM employees WHERE salary > '5000';

ORA-01722 오류 해결 방법

1. 데이터 타입 일치 확인

SELECT * FROM employees WHERE employee_id = TO_NUMBER('100');

2. CASE 문 활용

SELECT CASE WHEN REGEXP_LIKE(column_name, '^[0-9]+$') THEN TO_NUMBER(column_name) ELSE NULL END FROM table_name;

3. TRY-CATCH (PL/SQL 사용 시)

BEGIN
SELECT TO_NUMBER('ABC') INTO v_number FROM dual;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('변환 오류 발생!');
END;

4. WHERE 절에서 데이터 변환 피하기

SELECT * FROM employees WHERE salary > 5000; -- (X) salary를 TO_NUMBER()로 변환하지 않음

결론

ORA-01722 오류는 SQL 실행 중 숫자 변환 문제로 인해 발생하는 일반적인 오류입니다. 데이터를 조회하거나 삽입할 때는 데이터 타입이 일치하는지 확인하고, 명시적 변환을 사용하는 것이 중요합니다. 위 해결 방법을 적용하면 오류를 방지하고 SQL 성능을 최적화할 수 있습니다.