누군가를위한 아주 쉬운 것, 다음 삽입물은 나에게
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’;
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)