Supongo que qty
se define como un varchar2
en my_table
-- de lo contrario, no serviría de nada llamar a to_number
. Si esa suposición es correcta, apuesto a que hay alguna otra fila en la tabla donde qty
contiene datos no numéricos.
SQL es un lenguaje basado en conjuntos, por lo que Oracle (o cualquier otra base de datos) es perfectamente libre de evaluar las cosas en el orden que considere adecuado. Eso significa que Oracle es perfectamente libre de evaluar el to_number(qty)
expresión antes de aplicar el id=12345
predicado. Si Oracle encuentra una fila en la que qty
el valor no se puede convertir a un número, arrojará un error.
También es posible que haya algunos datos no numéricos en la fila particular donde id = 12345
que no se muestra (caracteres de control, por ejemplo). Puede comprobarlo ejecutando la consulta
SELECT dump(qty, 1016)
FROM my_table
WHERE id = 12345
(si desea decimal en lugar de hexadecimal, use 1010 como segundo parámetro para dump
) y verificando si hay algo inesperado en los datos.