본문 바로가기
ORACLE

ORA-01722 오류 해결 방법 | Oracle 숫자 변환 오류 완벽 가이드

by samie 2025. 4. 8.
ORA-01722 오류 해결 방법 | Oracle 숫자 변환 오류 완벽 가이드

ORA-01722: 숫자가 아닌 값이 숫자로 변환됨

Oracle에서 ORA-01722 오류는 SQL 문에서 숫자로 변환이 불가능한 값을 숫자 타입으로 변환하려고 할 때 발생합니다. 데이터 타입 불일치로 인해 SQL 문이 중단될 수 있으므로 주의가 필요합니다.

1. ORA-01722 오류란?

SQL을 실행할 때 다음과 같은 오류가 발생할 수 있습니다:


ORA-01722: invalid number

이는 문자열 값을 숫자 컬럼에 삽입하거나, 숫자 형식이 아닌 문자열을 숫자형으로 변환할 때 발생합니다.

2. 오류 발생 원인

ORA-01722 오류는 다음과 같은 상황에서 주로 발생합니다.

  • 🔢 VARCHAR2 컬럼을 숫자로 변환하려 할 때
  • 📝 문자열 안에 숫자가 아닌 문자가 포함된 경우
  • 🔗 WHERE 절 또는 JOIN 조건에서 숫자 변환
  • 📤 INSERT 또는 UPDATE 시 숫자 컬럼에 문자 값 삽입

3. 해결 방법

✔️ 1. 숫자 형식 확인

숫자로 변환되는 값에 숫자가 아닌 문자가 포함되어 있는지 확인해야 합니다.


SELECT * FROM employees WHERE TO_NUMBER(employee_name) = 123; -- 오류 발생 가능

해결: 해당 컬럼이 숫자가 아닐 경우 TO_NUMBER를 사용하지 말아야 합니다.

✔️ 2. WHERE 조건 재작성

숫자형 비교는 반드시 숫자형 컬럼에서만 수행해야 합니다.


-- 잘못된 예시
SELECT * FROM users WHERE TO_NUMBER(username) = 100;

-- 올바른 예시
SELECT * FROM users WHERE user_id = 100;

✔️ 3. 조건 필터링

숫자 형식만 필터링하여 오류를 방지할 수 있습니다.


SELECT *
FROM my_table
WHERE REGEXP_LIKE(my_column, '^\d+$') AND TO_NUMBER(my_column) = 100;

TIP: REGEXP_LIKE로 숫자 문자열만 필터링하면 오류를 예방할 수 있습니다.

4. 예제 및 실행 테스트

✔️ 오류 발생 예시


CREATE TABLE test_data (
  value VARCHAR2(10)
);

INSERT INTO test_data VALUES ('100');
INSERT INTO test_data VALUES ('ABC');

SELECT * FROM test_data WHERE TO_NUMBER(value) = 100; -- ORA-01722 발생

✔️ 해결된 쿼리


SELECT *
FROM test_data
WHERE REGEXP_LIKE(value, '^\d+$') AND TO_NUMBER(value) = 100;

5. 추가 팁 및 주의사항

  • 📌 WHERE 절에서는 문자형과 숫자형을 혼용하지 않도록 주의하세요.
  • 🔍 TO_NUMBER 함수 사용 전, 해당 값이 숫자 형식인지 확인해야 합니다.
  • 🧪 TEST 데이터를 충분히 테스트한 후 배포하세요.

🔚 마무리

ORA-01722 오류는 문자열을 숫자로 변환하려는 시도에서 발생합니다. 데이터 타입에 유의하고, REGEXP_LIKE 등을 활용하여 사전에 오류를 방지하세요.

다음 포스트에서는 더 많은 Oracle 오류 코드를 다룰 예정입니다. 도움이 되셨다면 공감과 댓글 부탁드립니다. 😊