66 votes

Quelle est la précision et l'échelle par défaut pour un nombre dans Oracle?

Lors de la création d'une colonne de type NUMBER dans Oracle, vous avez la possibilité de ne pas spécifier de précision ou d'échelle. Que font-ils par défaut si vous ne les spécifiez pas?

41voto

Angelo Marcotullio Points 479

NOMBRE (précision, échelle)

Si aucune précision n'est spécifiée, la colonne stocke les valeurs telles qu'elles sont données. Si aucune échelle n'est spécifiée, l'échelle est zéro.

Beaucoup plus d'infos sur:

http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832

14voto

baretta Points 4391

Je crois que la précision par défaut est 38, l'échelle par défaut est zéro. Cependant, la taille réelle d'une instance de cette colonne est dynamique. Il faudra autant d’espace que nécessaire pour stocker la valeur, soit 21 octets maximum.

9voto

Quassnoi Points 191041

Oracle stocke les nombres de la façon suivante: 1 byte pour l'alimentation, 1 byte pour la première significande chiffres (qui est l'un avant le séparateur), le reste pour les autres chiffres.

En digits ici Oracle moyen centesimal digits (j'. e. base 100)

SQL> INSERT INTO t_numtest VALUES (LPAD('9', 125, '9'))
  2  /

1 row inserted

SQL> INSERT INTO t_numtest VALUES (LPAD('7', 125, '7'))
  2  /

1 row inserted

SQL> INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))
  2  /

INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))

ORA-01426: numeric overflow

SQL> SELECT DUMP(num) FROM t_numtest;

DUMP(NUM)
--------------------------------------------------------------------------------
Typ=2 Len=2: 255,11
Typ=2 Len=21: 255,8,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79

Comme nous pouvons le voir, le nombre maximal ici est - 7.(7) * 10^124,, et il 19 centésimale chiffres pour la précision, ou 38 chiffres après la virgule.

4voto

spectra Points 31

En fait, vous pouvez toujours le tester vous-même.

CREATE TABLE CUSTOMERS ( CUSTOMER_ID NUMBER NOT NULL, JOIN_DATE DATE NOT NULL, CUSTOMER_STATUS VARCHAR2(8) NOT NULL, CUSTOMER_NAME VARCHAR2(20) NOT NULL, CREDITRATING VARCHAR2(10) ) ;

select nom_colonne, type_données, nullable, longueur_données, précision_données, échelle_données à partir de colonnes_tab_utilisateur où nom_table = 'CLIENTS';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X