ORA-01722: 수치가 잘못되었습니다. (invalid number)

Oracle DB

to_number() 함수를 이용하여 하여 “문자열 수치” (예 : “123,000”) 를 숫자로 변환할 때 숫자 이외에 문자가 포함되어 있으면 오류가 발생합니다. 여기서는 ORA-01722 오류가 발생하는 경우와 그렇지 않은 경우, 예시를 들어 소개하겠습니다.

연습용 테이블 및 데이터 작성

sqlplus scott/tiger” 또는 그 외 존재하는 “유저ID/패스워드”로 Oracle Database에 접속해서 다음과 같이 연습 용 테이블 및 데이터를 작성합니다.

create table temp01 (
key1 varchar(5),
value1 varchar(5)
);
insert into temp01 values ( 'a1', '123');
insert into temp01 values ( 'a2', '12,12');
insert into temp01 values ( 'a3', '12oz');      

제대로 작성되었는지 select문으로 데이터를 확인합니다.

SQL> select * from temp01;
KEY1  VALUE
----- -----
a1    123
a2    12,12
a3    12oz

to_number함수로 ORA-01722오류 발생 확인

조건 검색(key1 = ‘a1) 데이터에 대한 to_number(“123”)의 결과는 다음과 같이 정상으로 출력 됩니다.

SQL> select key1, to_number(value1) from temp01 where key1 = 'a1';
KEY1  TO_NUMBER(VALUE1)
----- -----------------
a1		    123

조건 검색(key1 = ‘a2) 데이터에 대한 to_number(“12,12”)의 결과는 콤마(,)를 숫자로 변환할 수 없어 다음과 같이 오류가 발생합니다.

SQL> select key1, to_number(value1) from temp01 where key1 = 'a2';
select key1, to_number(value1) from temp01 where key1 = 'a2'
             *
ERROR at line 1:
ORA-01722: invalid number

콤마(,) 는 1000단위의 금액의 구분 기호로 사용되기 때문에 ‘99,99‘ 형식을 지정하면 음과 같이 정상으로 출력 됩니다.

SQL>  select key1, to_number(value1,'99,99') from temp01 where key1 = 'a2';
KEY1  TO_NUMBER(VALUE1,'99,99')
----- -------------------------
a2			   1212
제목과 URL을 복사했습니다