125

誰かにとって非常に簡単なもの、次の挿入物は私に

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');
4

13 に答える 13

144

文字列を数値に変換しようとすると、ORA-01722エラーが発生し、文字列を数値に変換できません。

テーブル定義が表示されていないので、値リストの最後にある数値シーケンスを数値に変換しようとしているように見えます。それを区切るスペースがこのエラーをスローしています。しかし、あなたが私たちに提供した情報に基づいて、それは(最初のフィールド以外の)どのフィールドでも起こっている可能性があります。

于 2012-09-23T01:32:35.087 に答える
29

電話番号が次のように定義されているとNUMBERします。空白は数値に変換できません。

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

上記はあなたに

ORA-01722: 番号が無効です

于 2012-09-23T08:37:53.787 に答える
20

これを解決する1つの方法があります。数字以外の文字を削除してから、数字としてキャストします。

cast(regexp_replace('0419 853 694', '[^0-9]+', '') as number)
于 2013-12-27T15:35:57.033 に答える
12

それも可能です:

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

オラクルでの連結には、演算子||notが使用され+ます。

この場合、次のようになります。ORA-01722: invalid number ...

于 2016-08-08T12:35:39.177 に答える
10

このエラーは、数値以外の値を db の数値列に挿入しようとしているときに発生するため、最後のフィールドが数値である可能性があり、データベースで文字列として送信しようとしているようです。最後の値を確認してください。

于 2012-09-23T03:10:35.173 に答える
9

それの訳は:

文字列を数値に変換しようとしたSQLステートメントを実行しましたが、失敗しました。

で説明されているように:

このエラーを解決するには:

算術演算で使用できるのは、数値フィールドまたは数値を含む文字フィールドのみです。すべての式が数値に評価されることを確認してください。

于 2012-09-23T01:31:48.187 に答える
2

ステートメントを実行するinsert into...select * from...と、「無効な番号」エラーも発生しやすくなります。

FUND_ACCOUNT2 つの列を持つという名前のテーブルがあるとします。

AID_YEAR  char(4)
OFFICE_ID char(5)

また、OFFICE_ID を数値に変更したいが、テーブルに既存の行があり、さらに悪いことに、それらの行の一部に ' ' (空白) の OFFICE_ID 値があるとします。Oracle では、テーブルにデータがある場合、列のデータ型を変更することはできず、' ' を 0 に変換するにはちょっとしたコツが必要です。その方法は次のとおりです。

  1. 複製テーブルを作成します。CREATE TABLE FUND_ACCOUNT2 AS SELECT * FROM FUND_ACCOUNT;
  2. 元のテーブルからすべての行を削除します。DELETE FROM FUND_ACCOUNT;
  3. 元のテーブルにデータがなくなったら、その OFFICE_ID 列のデータ型を変更します。ALTER TABLE FUND_ACCOUNT MODIFY (OFFICE_ID number);

  4. しかし、ここがトリッキーな部分です。一部の行には空白の OFFICE_ID 値が含まれているため、単純な を実行するINSERT INTO FUND_ACCOUNT SELECT * FROM FUND_ACCOUNT2と、「ORA-01722 無効な番号」エラーが発生します。' ' (空白) OFFICE_ID を 0 に変換するには、insert ステートメントを次のようにする必要があります。

INSERT INTO FUND_ACCOUNT (AID_YEAR, OFFICE_ID) SELECT AID_YEAR, decode(OFFICE_ID,' ',0,OFFICE_ID) FROM FUND_ACCOUNT2;

于 2015-09-23T22:23:21.923 に答える
0

ORA-01722 エラーは非常に簡単です。トム・カイトによると:

文字列を数値に明示的または暗黙的に変換しようとしましたが、失敗しています。

ただし、問題がどこにあるのかは、最初はわからないことがよくあります。 このページは、問題のトラブルシューティング、発見、および修正に役立ちました。ヒント: 文字列を数値に明示的または暗黙的に変換している場所を探します。(私はNVL(number_field, 'string')私のコードにありました。)

于 2016-05-11T23:01:17.203 に答える