Стойността на колоната не беше нула, беше повредена. Вътрешното представяне, използвано за числа, е описано в документацията , или различни други места като това .
Първият байт е показателят и той може - просто - да бъде нула, но не само с 3 след него. Най-близкото според мен, което можете да получите, е 0,3,102
за -9,8*x10^125
Така че нека да разгледаме как се съхраняват някои в най-крайните краища:
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
Вашата изхвърлена стойност от 0,3
няма 102 в края, което означава отрицателно число, но ако е положително, първият байт ще бъде поне 128.
Има случаи на повредени номера от програми на OCI, които ги боравят неправилно, и дори наследен импорт прави същото. Без да знаете как първоначално са създадени данните, вероятно никога няма да разберете какво точно се е объркало, или кога, или каква е трябвало да бъде първоначалната стойност.
Странно е, че SQL Developer показва null в мрежата с резултати (изглежда прекъсва, ако заявите като скрипт); в SQL*Plus не показва стойност дори ако set null
към фиксиран низ. SQL Developer или JDBC драйверът може просто мълчаливо да преглъща невъзможността за конвертиране от вътрешно представяне.