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
'[개발] Programming > Database' 카테고리의 다른 글
ora-01843: not a valid month, 지정한 월이 부적합합니다. (0) | 2019.06.01 |
---|---|
ora-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다. 오류 (0) | 2019.05.28 |
오라클 SELECT 후 UPDATE 쿼리 (0) | 2019.04.09 |
오라클 SELECT 절에 문자 합치는 방법 (0) | 2019.02.21 |
iBATIS, CDATA를 적는 목적 (0) | 2018.11.07 |
댓글