반응형
오라클(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로 표현이 된다.
반응형
'IT > Oracle' 카테고리의 다른 글
[Oracle] user lacks create session privilege logon denied 문제 해결 방법 (0) | 2024.11.25 |
---|---|
[Oracle] Windows11 SQL Developer 설치하는 방법 (0) | 2024.11.25 |
[Oracle] 오라클(Oracle) 특정 데이터 값으로 모든 테이블에서 데이터 찾는 방법 (0) | 2023.12.26 |
[Oracle] 오라클(Oracle) ora-00257 archiver error. connect as sysdba only until resolved 문제 해결 방법 (0) | 2023.10.01 |
[Oracle] 오라클(Oracle) 문자열 SPLIT하는 방법 (0) | 2023.07.21 |
[Oracle] 오라클(Oracle) ORA-01843 지정한 월이 부적합합니다 문제 해결 방법 (0) | 2023.07.11 |
[Oracle] 오라클(Oracle) 데이터 롤백하는 방법 (0) | 2023.07.05 |
[Oracle] 오라클(Oracle) 날짜 및 AMPM 구하는 방법 (0) | 2023.07.03 |
최근댓글