복붙노트

[SQL] SQL 오류 "ORA-01722 : 잘못된 번호"

SQL

SQL 오류 "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');

해결법

  1. ==============================

    1.ORA-01722 오류는 시도는 숫자로 문자열을 변환하게되며, 문자열을 숫자로 변환 할 수없는 경우에 발생합니다.

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

    당신은 숫자로 값 목록의 끝에있는 숫자 순서를 변환하는 데 노력하고, 그것을 구분 공간이 오류를 던지고있다처럼 테이블 정의를 보지 않고, 그것은 보인다. 그러나 당신이 우리에게 주신 한 정보를 기반으로, 어떤 필드 (첫 번째 제외)에서 발생하는 수 있습니다.

  2. ==============================

    2.한다고 가정 전화 번호이어서 블랭크 숫자로 변환 될 수없는 수를 의미한다 :

    한다고 가정 전화 번호이어서 블랭크 숫자로 변환 될 수없는 수를 의미한다 :

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

    위의 당신에게 제공하는

  3. ==============================

    3.여기를 해결하는 하나의 방법이다. 제거 숫자가 아닌 문자는 숫자로 캐스팅.

    여기를 해결하는 하나의 방법이다. 제거 숫자가 아닌 문자는 숫자로 캐스팅.

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

    4.당신이 숫자 컬럼에 숫자가 아닌 값을 삽입하려고 할 때이 오류가 오면 DB에 당신의 마지막 필드가 숫자가 될 수 있다는 것 그리고 당신은 데이터베이스의 문자열로 보낼 위해 노력하고 있습니다. 마지막 값을 확인.

    당신이 숫자 컬럼에 숫자가 아닌 값을 삽입하려고 할 때이 오류가 오면 DB에 당신의 마지막 필드가 숫자가 될 수 있다는 것 그리고 당신은 데이터베이스의 문자열로 보낼 위해 노력하고 있습니다. 마지막 값을 확인.

  5. ==============================

    5.글쎄 그것은 또한 수 있습니다 :

    글쎄 그것은 또한 수 있습니다 :

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

    오라클 연결에 대한 연산자를 이용하는 경우 || 하지 +.

    이 경우 얻을 : ORA-01722를 : 유효하지 않은 숫자를 ...

  6. ==============================

    6.이 때문입니다:

    이 때문입니다:

    으로는 설명 :

    이 오류를 해결하려면 :

  7. ==============================

    7.나는이 질문을했다 :

    나는이 질문을했다 :

    오류 : ORA-01722 : 올바르지 않은 숫자 하나는 문제를 제시하는 것이

    나는 그냥 '문자열'을 만들기 위해, 그 명시 적으로 구분하기 위해는 "수치"값을 포위 :

    ... 봐라 : 그것은 예상 된 결과를 반환합니다.

    편집하다: 그리고 실제로 내 테이블의 COL의 acc_num는 문자열로 정의됩니다. 수치 것은 아니지만, 잘못된 번호가보고되었다. 그리고 문자열 숫자의 명시적인 경계 설정 문제를 해결.

    한편, 오라클은 숫자로 문자열을 처리 할 수 ​​있습니다. 수치 연산 그래서 / 기능은 문자열에 적용 할 수 있으며 이러한 쿼리가 작동 :

  8. ==============================

    8.내 경우에는 변환 오류가 나는 테이블 생성했다고, 기능 인덱스했다.

    내 경우에는 변환 오류가 나는 테이블 생성했다고, 기능 인덱스했다.

    삽입 된 데이터는 OK이다. 그것은 실제 오류가 버그가 인덱스에서 온 알아낼 걸 렸어요.

    오라클은이 경우에는보다 정확한 오류 메시지를 준 한 수 있다면 좋을 것입니다.

  9. ==============================

    9.당신이에 ...에서 ... 문을 선택 * 삽입을 할 경우, 그것은뿐만 아니라 '잘못된 번호'오류가 발생하기 쉽다.

    당신이에 ...에서 ... 문을 선택 * 삽입을 할 경우, 그것은뿐만 아니라 '잘못된 번호'오류가 발생하기 쉽다.

    하자 당신이 두 개의 열이있는 테이블이라고 FUND_ACCOUNT이 있다고 :

    AID_YEAR  char(4)
    OFFICE_ID char(5)
    

    그리고의 당신은 숫자로하는 OFFICE_ID을 수정할 것을 말하지만, 기존 테이블의 행, 심지어 악화가 있음을하자, 해당 행의 일부 (공백) '의 OFFICE_ID 값을 가지고있다. 오라클에서 테이블에 데이터가있는 경우는 컬럼의 데이터 유형을 수정할 수 없습니다, 그리고 그것은 그래서 여기에 0을 수행하는 방법에 '을'변환하기 위해 약간의 속임수가 필요합니다

    FUND_ACCOUNT2 FROM INSERT INTO FUND_ACCOUNT (AID_YEAR, OFFICE_ID) SELECT AID_YEAR 디코드 (OFFICE_ID ','0, OFFICE_ID);

  10. ==============================

    10.이것 역시 내게 일어난하지만 문제는 실제로 달랐다 : 파일 인코딩.

    이것 역시 내게 일어난하지만 문제는 실제로 달랐다 : 파일 인코딩.

    이 파일은 정확했다,하지만 파일 인코딩이 잘못되었습니다. 그것은 SQL 서버의 수출 유틸리티에 의해 생성되고 난 유니 코드로 저장되었습니다.

    파일 자체는 텍스트 편집기에서 좋은 모습,하지만 난 * .bad로 파일을 열 때 거부 된 선으로 생성 된 SQL * 로더, 나는 모든 오리지널 캐릭터 사이에 나쁜 문자를 가지고 보았다. 그럼 난 인코딩에 대한 생각.

    나는 메모장에서 원본 파일을 열어 ++ 및 ANSI로 변환, 모든 것이 제대로로드.

  11. ==============================

    11.ORA-01722 오류는 매우 간단합니다. 톰 카이트에 따르면 :

    ORA-01722 오류는 매우 간단합니다. 톰 카이트에 따르면 :

    어디에 문제가 그러나 처음에는 종종 분명하지 않다. 이 페이지는 문제 해결, 발견에 저를 도와, 내 문제를 해결. 힌트 : 당신은 명시 적 또는 암시 적으로 숫자로 문자열을 변환하는 장소를 찾으십시오. (난 내 코드에서), '문자열을'NVL (number_field을했다.)

  12. ==============================

    12.당신이 잘못된 번호 오류가있을 때뿐만 아니라,이 시도

    당신이 잘못된 번호 오류가있을 때뿐만 아니라,이 시도

    이에 a.emplid 숫자이며 측면 중 하나를 변환 할 수있어 경우 b.emplid는 그래서 VARCHAR2입니다

    여기서 TO_CHAR (a.emplid) = b.emplid

  13. ==============================

    13.당신은 항상 INSERT INTO 직원의 PHONE_NUMBER 값 (TO_NUMBER ( '0419 853 694')에 포함 할 수있는이 error.This을 제거하기 위해 TO_NUMBER () 함수를 사용할 수 있습니다;

    당신은 항상 INSERT INTO 직원의 PHONE_NUMBER 값 (TO_NUMBER ( '0419 853 694')에 포함 할 수있는이 error.This을 제거하기 위해 TO_NUMBER () 함수를 사용할 수 있습니다;

  14. from https://stackoverflow.com/questions/12549029/sql-error-ora-01722-invalid-number by cc-by-sa and MIT license