Question

Lors de la création d'une colonne de type NUMBER dans Oracle, vous avez la possibilité de ne pas spécifier une précision ou d'échelle. Qu'est-ce que ces valeurs ne si vous ne les spécifiez pas?

Était-ce utile?

La solution

NUMBER (précision, échelle)

Si une précision n'est pas spécifié, les colonne stocke les valeurs comme indiqué. Si aucune échelle est spécifiée, l'échelle est égal à zéro.

Beaucoup plus d'infos sur:

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

Autres conseils

Le type de NUMBER peut être spécifié dans différents styles :

                Resulting  Resulting  Precision
Specification   Precision  Scale      Check      Comment
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
NUMBER          NULL       NULL       NO         'maximum range and precision',
                                                 values are stored 'as given'
NUMBER(P, S)    P          S          YES        Error code: ORA-01438
NUMBER(P)       P          0          YES        Error code: ORA-01438
NUMBER(*, S)    38         S          NO

Lorsque la précision est le nombre total de chiffres et de l'échelle est le nombre de chiffres à droite ou à gauche (échelle négative) de la virgule décimale.

Oracle indique que ORA-01438

  

valeur plus grande que la précision spécifiée autorisée pour cette colonne

Comme il est indiqué dans le tableau, cette vérification d'intégrité est actif uniquement si la précision est explicitement spécifié. Sinon, Oracle arrondit silencieusement inséré ou mis à jour valeur à l'aide d'une méthode non spécifiée.

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, ou 21 octets max.

nombres Oracle magasins de la façon suivante:. 1 byte de puissance, 1 byte pour le premier chiffre de mantisse (à savoir une avant le séparateur), le reste pour les autres chiffres

Par digits ici Oracle signifie centesimal digits (i. 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 on peut le voir, le nombre maximal ici est 7.(7) * 10^124, et il a chiffres 19 centésimaux pour la précision, ou 38 chiffres décimaux.

En fait, vous pouvez toujours tester par 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 column_name, data_type, nullable, data_length, data_precision, data_scale from user_tab_columns where table_name ='CUSTOMERS';

Je développer la réponse de spectres pour que les gens ne doivent pas essayer eux-mêmes.

Cela a été fait sur la base de données Oracle 11g Express Edition de presse 11.2.0.2.0 -. La production

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

select column_name, data_type, nullable, data_length, data_precision, data_scale
from user_tab_columns where table_name ='CUSTOMERS'; 

Ce qui donne

COLUMN_NAME      DATA_TYPE  NULLABLE DATA_LENGTH DATA_PRECISION DATA_SCALE
CUSTOMER_ID      NUMBER     N        22        
FOO              FLOAT      N        22          126    
JOIN_DATE        DATE       N        7        
CUSTOMER_STATUS  VARCHAR2   N        8        
CUSTOMER_NAME    VARCHAR2   N        20        
CREDITRATING     VARCHAR2   Y        10    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top