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

Quand/Pourquoi Oracle ajoute-t-il NaN à une ligne dans une table de base de données

D'après la documentation :

Autant que je sache, vous ne pouvez obtenir NaN que dans un binary_float ou binary_double colonne; ces types de données ont leurs propres littéraux pour NaN également , et il y a un is nan état pour eux aussi, et le nanvl() fonction pour les manipuler.

Un exemple d'un moyen d'obtenir une telle valeur est de diviser une valeur flottante/double nulle par zéro :

select 0f/0 from dual;

0F/0
----
NaN  

... donc si vous voyez des NaN, votre logique d'application ou vos données sous-jacentes peuvent être brisées. (Notez que vous ne pouvez pas obtenir ceci avec un type de nombre "normal" ; vous obtenez ORA-01476: divisor is equal to zero sauf si le numérateur est float ou double).

Cependant, vous n'obtiendrez pas NaN pour des nombres nuls ou négatifs. Il est également possible que vous ayez une colonne de chaînes et qu'une application insère le mot "NaN", mais stocker des nombres sous forme de chaînes est une mauvaise idée à plusieurs niveaux, donc j'espère que ce n'est pas le cas.