Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Administration
Administration Forum d'entraide sur l'administration du serveur Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2007, 18h21   #1
Membre confirmé
 
Inscription : mars 2007
Messages : 750
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 750
Points : 277
Points : 277
Par défaut Définition de la taille d'un champ NUMBER

Bonjour,

j'aurais souhaité savoir s'il était préférable d'un point de vu performance et espace disque de définir la taille d'un NUMBER d'une colonne (ex: NUMBER(5,2) au lieu de NUMBER).
farenheiit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 22h38   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
je ne crois pas que ça fasse de différence... c'est juste une contrainte sur la colonne
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 15h35   #3
Membre du Club
 
Inscription : décembre 2006
Messages : 119
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 119
Points : 61
Points : 61
Mais n'y a-t-il pas une taille par défaut pour NUMBER ? J'ai lu qq part que c'était 38, ce qui le cas échéant peut être préjudiciable en espace pour une table de plusieurs millions de lignes, par rapport à NUMBER(5,2) qui doit faire 5 octets.
pat29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 15h46   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
C'est pas préjudiciable puisque ça ne prendra la place que de ce que tu y insères
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 16h21   #5
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Code :
1
2
3
4
5
6
7
8
9
10
SELECT 
  cast(column_value AS number(5,2)) "NUMBER(5,2)",
  vsize(cast(column_value AS number(5,2))) "VSIZE(NUMBER(5,2))",
  cast(column_value AS number) "NUMBER",
  vsize(cast(column_value AS number)) "VSIZE(NUMBER)"
FROM TABLE(sys.odcinumberlist(1,1.2345))
NUMBER(5,2) VSIZE(NUMBER(5,2))     NUMBER VSIZE(NUMBER)
----------- ------------------ ---------- -------------
          1                  2          1             2
       1.23                  3     1.2345             4
Pour le même nombre, style "1", la taille physique sera la même quelque soit la taille logique (la contrainte) du nombre.

Bien sûr avec number(5,2) on a moins de décimale, d'où la différence pour 1.2345...
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 16h23   #6
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Citation:
Envoyé par pat29 Voir le message
rapport à NUMBER(5,2) qui doit faire 5 octets.
number(5,2) aura une taille de 1 à 5 octets

Code :
1
2
3
4
5
6
7
8
SELECT 
  vsize(cast(0 AS number(5,2))),
  vsize(cast(-999.99 AS number(5,2)))
FROM dual
 
VSIZE(CAST(0ASNUMBER(5,2))) VSIZE(CAST(-999.99ASNUMBER(5,2)))
--------------------------- ---------------------------------
                          1                                 5
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2007, 16h31   #7
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
quant à number, c'est de 1 à 21 bits. Pour binary_float et binary_double, c'est toujours 4 et 8 bits

Code :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT 
  vsize(cast(0 AS number)) "number",
  vsize(cast(-1e125/7 AS number)) "number",
  vsize(cast(0 AS binary_float)) "binary_float",
  vsize(cast(-1e125/7 AS binary_float)) "binary_float",
  vsize(cast(0 AS binary_double)) "binary_double",
  vsize(cast(-1e125/7 AS binary_double))   "binary_double"
FROM dual
 
    number   number_1 binary_float binary_float_1 binary_double binary_double_1
---------- ---------- ------------ -------------- ------------- ---------------
         1         21            4              4             8               8
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2007, 10h18   #8
Membre du Club
 
Inscription : décembre 2006
Messages : 119
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 119
Points : 61
Points : 61
Si le NUMBER fonctionne en gros comme un VARCHAR2, il doit donc stocker je présume la taille et la position du point ?
Et saurais-tu pourquoi il stocke un chiffre par octet pour les NUMBER(compatibilités OS ?), alors que pour les float c'est stocké en binaire ?
pat29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2007, 12h39   #9
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Les nombres sont stockés en base 100 :


le plus petit nombre
Code :
1
2
3
4
5
SQL> SELECT dump(-9.999999999999999999999999999999999999999e125) FROM dual
 
DUMP(-9.999999999999999999999999999999999999999E125)
-------------------------------------------------------
Typ=2 Len=21: 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
le plus grand
Code :
1
2
3
4
5
6
SQL> SELECT dump(9.999999999999999999999999999999999999999e125) FROM dual
 
DUMP(9.999999999999999999999999999999999999999E125)
--------------------------------------------------------
Typ=2 Len=21: 255,100,100,100,100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100
On voit bien la base 100


Reference : http://www.ixora.com.au/notes/number_representation.htm
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h24.


 
 
 
 
Partenaires

Hébergement Web