Je l'ai cherché mais je ne trouve pas de réponse concluante à ma question ...
J'ai besoin de savoir quelle est la taille de stockage d'un champ numérique (p) dans Oracle.
Exemples: NUMBER (1), NUMBER (3), NUMBER (8), NUMBER (10) etc ...
Le stockage utilisé dépend de la valeur numérique réelle, ainsi que de la précision et de l'échelle de la colonne.
Le le guide des concepts d'Oracle 11gR2 dit :
Oracle Database stocke des données numériques au format de longueur variable. Chaque valeur est stockée en notation scientifique, avec 1 octet utilisé pour stocker l'exposant. La base de données utilise jusqu'à 20 octets pour stocker la mantisse, qui est la partie d'un nombre à virgule flottante qui contient ses chiffres significatifs. Oracle Database ne stocke pas les zéros de début et de fin.
Le le guide 10gR2 va plus loin :
En tenant compte de cela, la taille de colonne en octets pour une valeur de données numérique particulière NUMBER (p), où p est la précision d'une valeur donnée, peut être calculée en utilisant la formule suivante:
ROUND((length(p)+s)/2))+1
où s est égal à zéro si le nombre est positif et s est égal à 1 si le nombre est négatif.
Le zéro et l'infini positif et négatif (générés uniquement lors de l'importation à partir de bases de données Oracle version 5) sont stockés à l'aide de représentations uniques. Le zéro et l'infini négatif nécessitent chacun 1 octet; l'infini positif nécessite 2 octets.
Si vous avez accès à My Oracle Support, vous trouverez plus d'informations dans la note 1031902.6.
Vous pouvez voir le stockage réel utilisé avec vsize
ou 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
Notez que le stockage varie en fonction de la valeur, même s'ils sont tous dans une colonne number(10)
, et que deux nombres à 3 chiffres peuvent nécessiter des quantités de stockage différentes.
Le type de données number
dans Oracle est un type de données spécial de longueur variable comme varchar
. Ensuite, si vous stockez les mêmes données dans number(5)
et number(20)
le stockage est le même que pour déclarer une colonne comme varchar(100)
et varchar(200)
.
Ainsi, la spécification du paramètre p dans number(p,s)
n'a aucun effet sur la taille de stockage et ne sert qu'à appliquer une contrainte sur les données. Mais la spécification du paramètre s peut réduire la taille en arrondissant les données.
la taille de stockage minimale du type de données numérique est de 1 octet et le maximum est de 21 octets. Donc, si vous ne voulez pas appliquer de contrainte, utilisez le type de données number
sans paramètre p.
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