반응형

Oracle 로고

오라클(Oracle)에서 TO_NUMBER 함수를 사용할 때, VARCHAR 형식의 컬럼을 사용함에 있어 에러가 발생하여 이 글을 기록한다.


목차

1. 문제 원인
2. 문제 해결 방법

1. 문제 원인

DUAL 테이블에서 한 컬럼의 데이터가 VARCHAR 형식으로 있고, DEFAULT가 ' '인 경우에 TO_NUMBER를 통해 자리수 표현하기 위해 '999999D99' 를 사용했다. 그래서, 해당 컬럼의 데이터가 존재할 경우에는 상관이 없지만, 데이터가 없을 경우에는 ' ' 공백이 들어가기 때문에, TO_NUMBER 함수를 사용할 때 아래의 에러가 발생했다.

 

에러 내용 : SQL Error [1722] [42000]: ORA-01722: 수치가 부적합합니다


아래의 SQL 쿼리를 실행하면 에러가 발생한다.

SELECT TO_NUMBER(' ', '999999D99') AS CNT
  FROM DUAL

 

위의 쿼리와 같이, 공백이 들어간 경우에는 TO_NUMBER 함수를 사용하면 수치가 부적합하다고 나온다. 그래서, 이것을 CASE WHEN 등의 방법을 사용하여 처리를 해줘야 한다.

 

2. 문제 해결 방법

이 문제를 해결하는 방법은 테이블의 특정 컬럼을 NUMBER로 두고, DEFAULT를 0으로 설정을 하던지, 아니면 CASE WHEN을 사용하여 ' ' 공백을 0으로 처리하여 사용하는 방법이 있다.

 

SELECT TO_NUMBER(CASE WHEN TT01 = ' ' THEN 0 END, '999999D99') AS CNT
  FROM TEST;

 

위의 쿼리를 봤을 때, TEST 테이블에서 TT01이라는 컬럼의 값이 ' ' 공백이면 0으로 두어, 999999D99를 사용하여 자리 수 표현을 하면 된다.

SELECT TO_NUMBER('12345', '999999D99') AS CNT
  FROM DUAL

 

위와 같이, 12345를 넣어서 사용할 때, 12,345로 표현이 된다.


 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기