sql >> Base de Datos >  >> RDS >> Oracle

TO_CHAR(número) La función devuelve ORA-01722:número no válido

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.