Oracle
 sql >> Database >  >> RDS >> Oracle

Quando/perché Oracle aggiunge NaN a una riga in una tabella di database

Dalla documentazione :

Per quanto ne so, puoi ottenere NaN solo in un binary_float o binary_double colonna; questi tipi di dati hanno i propri valori letterali anche per NaN e c'è un is nan condizione anche per loro e il nanvl() funzione per manipolarli.

Un esempio di un modo per ottenere un tale valore è dividere un valore float/doppio zero per zero:

select 0f/0 from dual;

0F/0
----
NaN  

... quindi se vedi NaN, la logica dell'applicazione o i dati sottostanti potrebbero essere interrotti. (Nota che non puoi ottenerlo con un tipo di numero 'normale'; ottieni ORA-01476: divisor is equal to zero a meno che il numeratore non sia float o double).

Tuttavia, non otterrai NaN per zero o numeri negativi. È anche possibile che tu abbia una colonna di stringa e un'applicazione stia inserendo la parola "NaN", ma memorizzare i numeri come stringhe è una cattiva idea a molti livelli, quindi si spera che non sia così.