본문 바로가기
[개발] Programming/Database

오라클 ORA-01722: 수치가 부적합합니다.

by eatyourKimchi 2019. 5. 24.

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

 

해당 오류는 오라클에서 데이터 타입이 일치하지 않을 경우 발생합니다.

몇 가지 예를 들어보겠습니다.

 

 

 

1. 함수 결과 데이터 타입이 일치하지 않을 경우

 

1
2
3
SELECT DECODE(SUPPLY_PRICE, 'Y'10000'Free') AS SUPPLY_PRICE
  FROM PRICE_TABLE
;
cs

 

이 경우 결과 컬럼인 'SUPPLY_PRICE'는 Y/N에 따라

NUMBER 타입인 10000이 될 수도 있고, STRING 타입인 'Free'가 될 수 있습니다.

조건에 따라 NUMBER와 STRING 타입이 될수 있으므로 오류가 발생합니다.

문자인 'Free'를 0으로 수정하면 오류는 발생하지 않습니다.

 

 

2. 일치하지 않는 데이터 타입

 

1
2
3
4
SELECT SUPPLY_PRICE
  FROM PRICE_TABLE
 WHERE SUPPLY_PRICE = '공짜'
;
cs

 

이 경우 'SUPPLY_PRICE' 컬럼의 데이터 타입은 NUMBER인데,

WHERE 조건을 STRING으로 비교하면 데이터 타입이 일치하지 않아 오류가 발생합니다.

마찬가지로 '공짜' 대신 숫자 0을 넣어주면 오류는 발생하지 않습니다.

 

 

3. 다른 데이터 타입간 연산

 

1
2
3
SELECT 10000 - '오천원' AS SUPPLY_PRICE
  FROM PRICE_TABLE
;
cs

 

이 경우 NUMBER 타입에서 STRING을 빼려고 하기 때문에 오류가 발생합니다.

'오천원'을 5000으로 바꿔주면 오류는 발생하지 않습니다.

 

 

 

 

마지막으로 오라클 공식 다큐먼트를 공유하고 마치겠습니다.

 

 An ORA-01722 ("invalid number") error occurs when an attempt is made to convert a character string into a number, and the string cannot be converted into a valid number. Valid numbers contain the digits '0' through '9', with possibly one decimal point, a sign (+ or -) at the beginning or end of the string, or an 'E' or 'e' (if it is a floating point number in scientific notation). All other characters are forbidden.
There are numerous situations where this conversion may occur. A numeric column may be the object of an INSERT or an UPDATE statement. Or, a numeric column may appear as part of a WHERE clause. It is even possible for this error to appear when there are no numeric columns appearing explicitly in the statement!

http://www.orafaq.com/wiki/ORA-01722

 

 

 

댓글