Kolumnvärdet var inte null, det var korrupt. Den interna representationen som används för siffror är beskrivs i dokumentationen , eller olika andra platser som detta .
Den första byten är exponenten, och den kan - bara - vara noll, men inte med bara en 3:a efter den. Det närmaste jag tror du kan komma är 0,3,102
för -9,8*x10^125
Så låt oss titta på hur vissa i de yttersta ändarna lagras:
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
Ditt dumpade värde på 0,3
har inte 102 i slutet som anger ett negativt tal, men om det var positivt skulle den första byten vara minst 128.
Det har förekommit fall av siffror som skadats av OCI-program som missköter dem, och till och med äldre import gör detsamma. Utan att veta hur data ursprungligen skapades kommer du förmodligen aldrig att veta exakt vad som gick fel, eller när, eller vad värdet ursprungligen var tänkt att vara.
Det är konstigt att SQL Developer visar null i resultatrutnätet (det verkar avbryta om du frågar som ett skript); i SQL*Plus visar det inget värde även om du set null
till en fast sträng. SQL Developer, eller JDBC-drivrutinen, kanske bara tyst sväljer oförmågan att konvertera från intern representation.