Il valore della colonna non era nullo, era danneggiato. La rappresentazione interna utilizzata per i numeri è descritto nella documentazione , o vari altri posti come questo .
Il primo byte è l'esponente e può - solo - essere zero, ma non seguito solo da un 3. Il più vicino che penso tu possa ottenere è 0,3,102
per -9,8*x10^125
Quindi diamo un'occhiata a come vengono archiviati alcuni alle estremità estreme:
with t (n) as (
select 1 * power(10, -130) from dual
union all select 1 * power(10, 125) from dual
union all select -1 * power(10, -130) from dual
union all select -1 * power(10, 125) from dual
union all select -9.7 * power(10, 125) from dual
union all select -9.8 * power(10, 125) from dual
union all select -9.85 * power(10, 125) from dual
union all select -9.9 * power(10, 125) from dual
)
select n, dump(n) d1, dump(n, 1016) d2 from t
N D1 D2
----------- ------------------------------ ------------------------------
1.000E-130 Typ=2 Len=2: 128,2 Typ=2 Len=2: 80,2
1.000E+125 Typ=2 Len=2: 255,11 Typ=2 Len=2: ff,b
-1.000E-130 Typ=2 Len=3: 127,100,102 Typ=2 Len=3: 7f,64,66
-1.000E+125 Typ=2 Len=3: 0,91,102 Typ=2 Len=3: 0,5b,66
-9.700E+125 Typ=2 Len=3: 0,4,102 Typ=2 Len=3: 0,4,66
-9.800E+125 Typ=2 Len=3: 0,3,102 Typ=2 Len=3: 0,3,66
-9.850E+125 Typ=2 Len=4: 0,3,51,102 Typ=2 Len=4: 0,3,33,66
-9.900E+125 Typ=2 Len=3: 0,2,102 Typ=2 Len=3: 0,2,66
select 1 * power(10, 126) from dual;
ORA-01426: numeric overflow
Il tuo valore di dumping di 0,3
non ha il 102 alla fine che denota un numero negativo, ma se fosse positivo il primo byte sarebbe almeno 128.
Ci sono stati casi in cui i numeri sono stati corrotti da programmi OCI che li hanno gestiti in modo errato e persino l'importazione legacy ha fatto lo stesso. Senza sapere come sono stati originariamente creati i dati, probabilmente non saprai mai esattamente cosa è andato storto, quando o quale valore doveva essere originariamente.
È strano che SQL Developer mostri null nella griglia dei risultati (sembra interrompersi se si esegue una query come script); in SQL*Plus non mostra alcun valore anche se set null
ad una stringa fissa. SQL Developer, o il driver JDBC, potrebbe semplicemente ingoiare silenziosamente l'impossibilità di convertire dalla rappresentazione interna.