Domanda

Quando si crea una colonna di tipo NUMBER in Oracle, si ha la possibilità di non specificare una precisione o la scala. Cosa significano questi predefinita fare se non li si specifica?

È stato utile?

Soluzione

NUMERO (precisione, scala)

Se una precisione non è specificato, i negozi colonna Valori come dato. Se non viene specificato scala, la scala è pari a zero.

Molto più informazioni all'indirizzo:

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

Altri suggerimenti

Il tipo NUMBER può essere specificato nel stili differenti :

                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

Dove la precisione è il numero totale di cifre e la scala è il numero di destra o sinistra cifre (scala negativa) del punto decimale.

Oracle specifica ORA-01438 come

  

valore maggiore di precisione specificata consentito per la colonna

Come indicato nella tabella, questo controllo di integrità è attivo solo se la precisione è esplicitamente specificato. In caso contrario, Oracle arrotonda in silenzio il inserito o aggiornato valore utilizzando un metodo non specificato.

Credo che la precisione di default è 38, scala di default è pari a zero. Tuttavia la dimensione effettiva di un'istanza di questa colonna, è dinamica. Ci vorrà tutto lo spazio necessario per memorizzare il valore, o max 21 byte.

memorizza Oracle numeri nel modo seguente:. 1 byte per potenza, 1 byte per la prima cifra significando (cioè una prima del separatore), il resto per le altre cifre

Per digits qui Oracle significa 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

Come si può vedere, il numero massimo qui è 7.(7) * 10^124, e lui hanno cifre 19 centesimali per la precisione, o cifre decimali 38.

In realtà, si può sempre provare da soli.

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';

I ampliare la risposta di spettri così la gente non c'è bisogno di provare per se stessi.

Questo è stato fatto su Oracle Database 11g Express Edition uscita 11.2.0.2.0 -. Produzione

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'; 

che produce

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    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top