138 votes

Erreur SQL "ORA-01722 : numéro invalide".

C'est très facile pour quelqu'un, L'encart suivant me donne le

ORA-01722 : numéro invalide

Pourquoi ?

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

156voto

BryceAtNetwork23 Points 5053

Une erreur ORA-01722 se produit lorsqu'on tente de convertir une chaîne de caractères en un nombre, et que la chaîne ne peut pas être convertie en un nombre.

Sans voir votre définition de table, il semble que vous essayez de convertir la séquence numérique à la fin de votre liste de valeurs en un nombre, et les espaces qui la délimitent provoquent cette erreur. Mais d'après les informations que vous nous avez données, cela pourrait se produire sur n'importe quel champ (autre que le premier).

32voto

hol Points 4726

Supposons que tel_number est défini comme suit NUMBER - alors les espaces vides dans cette valeur fournie ne peuvent pas être convertis en un nombre :

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

Ce qui précède vous donne un

ORA-01722 : numéro invalide

21voto

gmlacrosse Points 41

Voici une façon de le résoudre. Supprimez les caractères non numériques et transformez-les en chiffres.

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

14voto

Mahmoud Gamal Points 46598

C'est parce que :

Vous avez exécuté une instruction SQL qui essayait de convertir une chaîne de caractères en un fichier nombre, mais sans succès.

Comme expliqué dans :

Pour résoudre cette erreur :

Uniquement les champs numériques ou les champs de caractères qui contiennent des valeurs numériques. peuvent être utilisés dans des opérations arithmétiques. Assurez-vous que toutes les expressions soient évaluées par des nombres.

14voto

Lazar Lazarov Points 1067

Il peut aussi l'être :

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

où pour la concaténation dans l'oracle est utilisé l'opérateur || pas + .

Dans ce cas, vous obtenez : ORA-01722: invalid number ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X