Oracle
 sql >> Base de données >  >> RDS >> Oracle

TO_CHAR(nombre) La fonction renvoie ORA-01722 :nombre invalide

Je suppose que qty est défini comme un varchar2 dans my_table -- sinon, il n'y aurait aucun intérêt à appeler to_number . Si cette hypothèse est correcte, je parierai qu'il y a une autre ligne dans le tableau où qty contient des données non numériques.

SQL est un langage basé sur des ensembles, donc Oracle (ou toute autre base de données) est parfaitement libre d'évaluer les choses dans l'ordre qu'il juge approprié. Cela signifie qu'Oracle est parfaitement libre d'évaluer le to_number(qty) expression avant d'appliquer le id=12345 prédicat. Si Oracle rencontre une ligne où la qty la valeur ne peut pas être convertie en nombre, cela générera une erreur.

Il est également possible qu'il y ait des données non numériques dans la ligne particulière où id = 12345 qui se trouve ne pas s'afficher (caractères de contrôle par exemple). Vous pouvez le vérifier en exécutant la requête

SELECT dump(qty, 1016) 
  FROM my_table
 WHERE id = 12345

(si vous voulez décimal plutôt qu'hexadécimal, utilisez 1010 comme deuxième paramètre pour dump ) et en vérifiant s'il y a quelque chose d'inattendu dans les données.