[Oracle] Teste chaine de caractere

Teste chaine de caractere [Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 05-12-2005 à 16:09:02    

Bonjour,
 
Je suis sous oracle 9i. J ai une requete de mise a jour d'un champ qui recupere le contenu d'un champ, le converti en nombre et fait une opération desssu pour renseigner une nouvelle colonne.
 
Il arrive de temps en temps que des valeurs avec des caractere non numerique se glissent dans la colonne. Et ca plante le traitement.
 
Je ne sais pas comment m'y prendre pour tester que je n ai que des caractere numerique dans ma colonne ( les expression reguliere arrivent avec la version 10)
 
Merci

Reply

Marsh Posté le 05-12-2005 à 16:09:02   

Reply

Marsh Posté le 05-12-2005 à 16:34:49    

le plus simple est de faire une fonction prenant en paramètre un VARCHAR(4000)
 
Implémentant une gestion d'erreur, et tentant un CAST en NUMBER(18)
 
val = to_number(val)
on error
val = 0
 
et zou ! t'appelles cette fonction sur ton champs, avec un decode sur le test to_char(fct(val)) != val pour détecter s'il y a eu une erreur

Reply

Marsh Posté le 05-12-2005 à 16:41:38    

Ok j achete c est bien dans l esprit ca. Par contre niveau realisation, aurais tu un exemple de gestion d'erreur ?

Reply

Marsh Posté le 05-12-2005 à 16:49:30    

aucun exemple.
mais je me souviens m'être posé le problème un coup, et j'étais tombé sur cette solution dans google et y'avais un exemple de cette fonction, donc à priori, suffit de chercher "isnumeric oracle" dans google ou un truc du genre et ça doit aller :)

Reply

Marsh Posté le 05-12-2005 à 16:50:45    

encore mieu !
 
http://www.techonthenet.com/oracle [...] umeric.php
 
là, c'est bien pourri comme solution (parcequ'on ne comprends pas ce qu'on fait) mais ça à l'air pas mal du tout !

Reply

Marsh Posté le 05-12-2005 à 16:52:04    

ceci dit, ce n'est pas parfait comme solution :
 
192.168.0.1 sera détecté comme un nombre, tout comme l'expression "1+1"...

Reply

Marsh Posté le 05-12-2005 à 17:02:57    

Oui mais mais si j enleve +-. de la fonction ca marche car si il tombe sur un . un + ou - il retourne une valeur.
 
Merci bcp pour votre aide.

Reply

Marsh Posté le 05-12-2005 à 17:04:57    

si t'as ni nombre négatifs ni décimaux, en effet c'est parfait !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed