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.