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 오류 코드를 다룰 예정입니다. 도움이 되셨다면 공감과 댓글 부탁드립니다. 😊
'ORACLE' 카테고리의 다른 글
ORA-01017 오류 해결 방법 | Oracle 로그인 실패 원인과 대처법 (0) | 2025.04.10 |
---|---|
ORA-00904 오류 해결 방법 | Oracle SQL 컬럼 오류 완전 정복 (0) | 2025.04.09 |
ORA-00942 오류 해결 방법 | Oracle 테이블 존재하지 않음 오류 해결 가이드 (0) | 2025.04.07 |
ORA-12560 오류 해결 방법 | Oracle TNS 프로토콜 어댑터 오류 완벽 가이드 (0) | 2025.04.06 |
ORA-12514 오류 해결 방법 | Oracle TNS Listener 오류 완벽 가이드 (0) | 2025.04.05 |