Размер хранилища Oracle NUMBER(p)?

Я искал его, но не могу найти окончательного ответа на свой вопрос...

Мне нужно знать, каков размер хранилища поля number (p) в Oracle.

примеры: число (1), число(3), число(8), число(10) и т.д...

3 ответов


используемое хранилище зависит от фактического числового значения, а также точности столбца и масштаба столбца.

на руководство концепций СУБД Oracle 11gR2 говорит:

база данных Oracle хранит числовые данные в формате переменной длины. Каждое значение хранится в научной нотации с 1 байтом, используемым для хранения показателя. База данных использует до 20 байт для хранения мантиссы, которая является частью числа с плавающей запятой, содержащего его значимых цифр. База данных Oracle не хранит ведущие и конечные нули.

на руководство 10gR2 идет дальше:

принимая это во внимание, размер столбца в байтах для конкретного числовое значение данных NUMBER (p), где p-точность заданного значение, может быть рассчитано по следующей формуле:

ROUND((length(p)+s)/2))+1

где s равно нулю, если число положительное, и s равно 1, Если номер отрицательный.

нуль и положительная и отрицательная бесконечность (только произведенная на импорте от Версия 5 Oracle databases) хранятся с использованием уникальных представлений. Нулевая и отрицательная бесконечность требуют 1 байт; положительная бесконечность требует 2 байта.

если у вас есть доступ к моей поддержке Oracle, есть дополнительная информация в примечании 1031902.6.

вы можете увидеть фактическое хранилище, используемое с vsize или dump.

create table t42 (n number(10));

insert into t42 values (0);
insert into t42 values (1);
insert into t42 values (-1);
insert into t42 values (100);
insert into t42 values (999);
insert into t42 values (65535);
insert into t42 values (1234567890);

select n, vsize(n), dump(n)
from t42
order by n;

          N   VSIZE(N)                           DUMP(N) 
------------ ---------- ---------------------------------
         -1          3           Typ=2 Len=3: 62,100,102 
          0          1                  Typ=2 Len=1: 128 
          1          2                Typ=2 Len=2: 193,2 
        100          2                Typ=2 Len=2: 194,2 
        999          3           Typ=2 Len=3: 194,10,100 
      65535          4          Typ=2 Len=4: 195,7,56,36 
 1234567890          6   Typ=2 Len=6: 197,13,35,57,79,91 

обратите внимание, что хранилище изменяется в зависимости от значения, хотя все они находятся в number(10) столбец, и что два 3-значных числа могут нуждаться в разных объемах хранения.


NUMBER  
999...(38 9's) x10125 
maximum value   Can be represented to full 38-digit precision (the mantissa).

-999...(38 9's) x10125 
minimum value   Can be represented to full 38-digit precision (the mantissa).


Precision   38 significant digits    ==> NUMBER(38) is the max

Refer здесь может быть здесь


The number тип данных в Oracle-это специальный тип данных переменной длины, таких как varchar. Затем, если вы храните те же данные в number(5) и number(20) хранилище такое же, как объявление столбца как varchar(100) и varchar(200).

таким образом, указав параметр p в number(p,s) не влияет на размер хранилища и предназначен только для применения ограничений к данным. Но указание параметра s может уменьшить размер путем округления данных.

минимальный размер хранения количество тип данных - 1 байт, максимум-21 байт. Поэтому, если вы не хотите применять ограничение, используйте number тип данных без параметра p.