2015-10-07 7 views
0

Если я объявляю в оракуле столбец как число, будет ли максимальное количество его сохранено? На основании документации:ORACLE Максимальное число

положительных чисел в диапазоне от 1 х 10 (поднял) -130 до 9,99 ... 9 х 10 (поднятый) 125 с до до 38 значащих цифр

10 (поднятый) 125 - очень большое число, которое имеет более 38 цифр. Не будет ли он храниться? Если число, превышающее 38 цифр, сохраняется, оно не будет выполнено? , сохранит ли он, но когда запрос будет терять точность?

Благодаря

+1

пытались ли вы его? – sstan

+1

Я подчеркиваю слово «значимый» из документации – Husqvik

ответ

1

От Oracle Doc

Положительных чисел в диапазоне 1 х 10^130 до 9,99 ... 9 х 10^125 с до до 38 значащих цифр Отрицательных чисел от -1 х 10^130 до 9,99 ... 99 х 10^125 с до 38 значащих цифр

Тестовые

create table tbl(clm number); 
insert into tbl select power(10, -130) from dual; 
insert into tbl select 9.9999*power(10, 125) from dual; 
insert into tbl select 0.12345678912345678912345678912345678912123456 from dual; 
insert into tbl select -1*power(10, -130) from dual; 
select clm from tbl; 
select to_char(clm) from tbl; 

Выходной

1.000000000000000000000000000000000E-130 
9.999900000000000000000000000000000E+125 
.123456789123456789123456789123456789121 
-1.00000000000000000000000000000000E-130 
0

Числа (Тип данных NUMBER) сохраняются с использованием scientific notation

т.е. +1000000, как 1 * 10^6 т.е. хранить только 1 (мантисса) и 6 (показатель)

Для первого номера вам нужен только 1 байт для мантиссы, для вторых 4 байтов (2 байта на каждый байт).

Таким образом, используя NUMBER, вы не получите исключение, теряя точность.

select power(2,136) from dual; 
87112285931760246646623899502532662132700 

Это число не точное и «заполнено» нулями (экспонентой). Это может быть или не быть вредным - рассмотрите, например, функция MOD:

select mod(power(2,136),2) from dual; 
-100 

Если вы хотите точно контролировать точность, например, Тип данных ЧИСЛО (38,0)

select cast(power(2,136) as NUMBER(38,0)) from dual; 

ORA-01438: value larger than specified precision allowed for this column 
Смежные вопросы