Размер хранилища 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
The number
тип данных в Oracle-это специальный тип данных переменной длины, таких как varchar
. Затем, если вы храните те же данные в number(5)
и number(20)
хранилище такое же, как объявление столбца как varchar(100)
и varchar(200)
.
таким образом, указав параметр p в number(p,s)
не влияет на размер хранилища и предназначен только для применения ограничений к данным. Но указание параметра s может уменьшить размер путем округления данных.
минимальный размер хранения количество тип данных - 1 байт, максимум-21 байт. Поэтому, если вы не хотите применять ограничение, используйте number
тип данных без параметра p.