Oracle
хранит числа следующим образом: 1 byte
для мощности, 1 byte
для первой значащей и цифры (то есть один перед разделителем), остальные для остальных цифр.
Здесь digits
Oracle
означает centesimal digits
(т. Е. base 100
)
SQL> INSERT INTO t_numtest VALUES (LPAD('9', 125, '9'))
2 /
1 row inserted
SQL> INSERT INTO t_numtest VALUES (LPAD('7', 125, '7'))
2 /
1 row inserted
SQL> INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))
2 /
INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))
ORA-01426: numeric overflow
SQL> SELECT DUMP(num) FROM t_numtest;
DUMP(NUM)
--------------------------------------------------------------------------------
Typ=2 Len=2: 255,11
Typ=2 Len=21: 255,8,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79
Как мы видим, максимальное число здесь составляет 7.(7) * 10^124
, и у него есть 19
сотенные цифры для точности или 38
десятичные цифры.