[sql] SQL 오류 “ORA-01722 : 잘못된 번호”

누군가를위한 아주 쉬운 것, 다음 삽입물은 나에게

ORA-01722 : 잘못된 번호

왜?

INSERT INTO CUSTOMER VALUES (1,'MALADY','Claire','27 Smith St Caulfield','0419 853 694');
INSERT INTO CUSTOMER VALUES (2,'GIBSON','Jake','27 Smith St Caulfield','0415 713 598');
INSERT INTO CUSTOMER VALUES (3,'LUU','Barry','5  Jones St Malvern','0413 591 341');
INSERT INTO CUSTOMER VALUES (4,'JONES','Michael','7  Smith St Caulfield','0419 853 694');
INSERT INTO CUSTOMER VALUES (5,'MALADY','Betty','27 Smith St Knox','0418 418 347');



답변

ORA-01722 오류는 문자열을 숫자로 변환하려고 시도하고 문자열을 숫자로 변환 할 수없는 경우 발생합니다.

테이블 정의를 보지 않고 값 목록 끝에있는 숫자 시퀀스를 숫자로 변환하려는 것처럼 보이며이를 구분하는 공백으로 인해이 오류가 발생합니다. 그러나 귀하가 제공 한 정보에 따라 모든 분야 (첫 번째 분야 제외)에서 발생할 수 있습니다.


답변

전화 번호가 정의 된 NUMBER다음 공백을 숫자로 변환 할 수 없다고 가정합니다.

create table telephone_number (tel_number number);
insert into telephone_number values ('0419 853 694');

위의 내용은

ORA-01722 : 잘못된 번호


답변

이를 해결하는 한 가지 방법이 있습니다. 숫자가 아닌 문자를 제거한 다음 숫자로 캐스트하십시오.

cast(regexp_replace('0419 853 694', '[^0-9]+', '') as number)


답변

이 오류는 숫자가 아닌 값을 db의 숫자 열에 삽입하려고 할 때 발생하므로 마지막 필드가 숫자 일 수 있으며 데이터베이스에서 문자열로 보내려고합니다. 마지막 값을 확인하십시오.


답변

또한 다음과 같습니다.

SELECT t.col1, t.col2, ('test' + t.col3) as test_col3
FROM table t;

오라클에서 연결이 사용되는 곳은 연산자가 ||아닙니다.+ .

이 경우 다음을 얻습니다. ORA-01722: invalid number ...


답변

이 때문입니다:

문자열을 숫자로 변환하려는 SQL 문을 실행했지만 실패했습니다.

다음에 설명 된대로 :

이 오류를 해결하려면 :

산술 연산에는 숫자 필드 또는 숫자 값이 포함 된 문자 필드 만 사용할 수 있습니다. 모든 표현식이 숫자로 평가되는지 확인하십시오.


답변

Oracle은 String 열 값에 대해 자동 String2number 변환을 수행 합니다! 그러나 SQL의 텍스트 비교의 경우 입력은 명시 적으로 문자열로 구분되어야합니다. 반대 변환 number2String은 SQL 쿼리 수준이 아니라 자동으로 수행되지 않습니다.

이 쿼리가 있습니다.

select max(acc_num) from ACCOUNTS where acc_num between 1001000 and 1001999;

그 사람은 문제를 제기했습니다. Error: ORA-01722: invalid number

방금 “숫자” 값을 둘러 싸서 ‘Strings’ 으로 만들고 명시 적으로 구분합니다 .

select max(acc_num) from ACCOUNTS where acc_num between '1001000' and '1001999';

… 및 voilà : 예상 결과를 반환합니다.

편집 :
그리고 실제로 : acc_num내 테이블 의 col 은 String. 수치는 아니지만 invalid number가보고되었습니다. 그리고 문자열 번호 의 명시적인 구분 으로 문제가 해결되었습니다.

반면에 오라클 문자열을 숫자로 취급 할 수 있습니다 . 따라서 숫자 연산 / 함수를 문자열에 적용 할 수 있으며 다음 쿼리가 작동합니다.

최대 선택TABLE (문자열 _ 열) ;

TABLE에서 string_column을 선택하십시오. 여기서 string_column ‘2’와 ‘z’사이입니다.

TABLE에서 string_column을 선택하십시오. 여기서 string_column > ‘1’;

TABLE에서 string_column을 선택하십시오. 여기서 string_column <= ‘b’;