일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 체스-TD
- 임바 오토체스
- 모바일레전드
- 영어공부
- 롤
- 독해연습
- 여행
- 관광
- 영어유머
- java program
- 왕좌의게임
- 게임기
- Mobile Legends
- Chess-TD
- MLBB
- 심플한 게임
- 가볼만한곳
- 골든게이트
- English Joke
- 영어독해
- 영어 유머
- 이솝우화
- 게임
- 오큘러스
- 오라클
- english study
- Imba Auto Chess
- OGGMA
- oracle
- Python
- Today
- Total
Almost-Native
오라클 to_number 함수 사용시 ORA-01722 에러 대처방법 몇가지 본문
오라클 to_number 함수 사용시 ORA-01722 에러 대처방법 몇가지
2020. 12. 17. 14:45Oracle to_number( ) 함수는 varchar2 등 문자열 타입에 들어있는 숫자 데이터를 number 타입으로 변환하고자 할 때 사용합니다.
그런데, to_number( ) 함수를 사용할때 ORA-01722 에러를 만나는 경우가 꽤 많습니다.
이유는 아래 TEST1 테이블과 같이 데이터에 숫자만 들어있는게 아니라, 특수문자나 알파벳 같은 것들이 들어 있기 때문입니다.
SQL> select to_number(data) from TEST1;
ERROR:
ORA-01722: invalid number
위의 경우는 TEST1 테이블에 데이터가 몇개 없기 때문에 한번 쭉 조회해보면 쉽게 알 수 있습니다.
하지만, 데이터가 십만건, 백만건 정도 되는 경우는 이 잘못된 데이터를 찾는 것이 쉽지 않습니다.
이때, 사용할 수 있는 방법이 오라클에서 제공하는 정규표현식 함수 regexp_like( ) 함수 입니다.
SQL> select data
from TEST1
where regexp_like(data, '[^0-9]');
DATA
--------------------
120-
cc123
[^0-9] 는 "숫자가 아닌 데이터를 모두 찾아라" 라는 정규표현식(Regulara Expression) 패턴입니다.
이런식으로 잘못된 데이터를 찾아서 해당 데이터를 제대로된 값으로 바꿔주고나서 다시 to_number( ) 를 해주면 되겠습니다.
또다른 방법으로, 18c New Feature 를 이용하는 방법입니다.
Oracle 18c 부터는 to_number( ) 함수가 기능이 개선되어, 함수안에 on conversion error 라는 키워드를 넣을 수 있습니다. 숫자로 컨버전하다가 에러가 나면 지정한 default 값을 출력하라고 지정하는 것입니다.
SQL> select to_number(data default -1 on conversion error)
from TEST1;
TO_NUMBER(DATADEFAULT-1ONCONVERSIONERROR)
-----------------------------------------
1000
20000
333
-1
-1
또 다른 방법으로, validate_conversion( ) 함수를 사용해서 체크해 볼 수 있습니다.
아래처럼 사용하고, "= 0" 대신 "=1" 로 하면 제대로 변환이 가능한 데이터만 조회할 수 있습니다.
SQL>
select data
from TEST1
where validate_conversion(data as number) = 0;
DATA
--------------------
120-
cc123
on conversion error 와 validate_conversion 함수는 Oracle 18c 의 신기능이기 때문에 18c, 19c 등의 DB에서만 사용할 수 있는 방법입니다.
11g, 12c 등에서는 사용할 수 없습니다.
'Java 프로그램 개발, IT' 카테고리의 다른 글
클라우드 용어 - VCN, VPC, Virtual Network (가상네크워크) (0) | 2020.12.23 |
---|---|
오라클 to_date 함수 사용시 ORA-01830, ORA-01839, ORA-01840, ORA-01841, ORA-01843, ORA-01847, ORA-01858 에러 대처방법 (0) | 2020.12.17 |
오라클 impdp 작업시 에러 (ORA-39002, ORA-39070, ORA-39087) (0) | 2020.12.12 |
오라클 Directory 생성/삭제/변경, 권한부여 (grant) (0) | 2020.12.12 |
오라클 DB에서 유니코드 UTF-8 코드값으로 한글 출력하기 (0) | 2020.12.12 |