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

¿Cuándo/por qué Oracle agrega NaN a una fila en una tabla de base de datos?

De la documentación :

Que yo sepa, solo puede obtener NaN en un binary_float o binary_double columna; esos tipos de datos tienen sus propios literales para NaN también , y hay un is nan condición para ellos también, y el nanvl() función para manipularlos.

Un ejemplo de una forma de obtener dicho valor es dividir un valor de cero flotante/doble por cero:

select 0f/0 from dual;

0F/0
----
NaN  

... entonces, si ve NaN, la lógica de su aplicación o los datos subyacentes podrían estar dañados. (Tenga en cuenta que no puede obtener esto con un tipo de número 'normal'; obtiene ORA-01476: divisor is equal to zero a menos que el numerador sea flotante o doble).

Sin embargo, no obtendrá NaN para números cero o negativos. También es posible que tenga una columna de cadena y una aplicación esté poniendo la palabra 'NaN', pero almacenar números como cadenas es una mala idea en muchos niveles, así que espero que ese no sea el caso.