Pregunta

Al crear una columna de tipo NUMBER de Oracle, usted tiene la opción de no especificar una precisión o escala. ¿Qué hacen estos por defecto si no se especifica ellos?

¿Fue útil?

Solución

NÚMERO (precisión, escala)

Si no se especifica una precisión, las tiendas de columna valores como dado. Si no se especifica la escala, la escala es cero.

Mucho más información en:

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

Otros consejos

El tipo NUMBER se puede especificar en href="http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#sthref119" diferentes estilos :

                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

Cuando la precisión es el número total de dígitos y la escala es el número de derecho dígitos o izquierda (escala negativa) del punto decimal.

Oracle especifica ORA-01438 como

  

valor mayor que la precisión especificada permitida para esta columna

Como se ha indicado en la tabla, esta comprobación de integridad sólo se activa si la precisión se especifica explícitamente. De lo contrario Oracle redondea en silencio insertado o actualizado valor utilizando algún método no especificado.

Creo que la precisión predeterminada es de 38, de escala por defecto es cero. Sin embargo, el tamaño real de una instancia de esta columna, es dinámica. Se llevará a todo el espacio necesario para almacenar el valor, ó un máximo de 21 bytes.

almacena números Oracle de la siguiente manera:. 1 byte para la energía, 1 byte para el primer dígito significand (que es uno antes del separador), el resto de los otros dígitos

Por digits aquí 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

Como podemos ver, el número máximo aquí es 7.(7) * 10^124, y tener dígitos 19 centesimales de precisión, o dígitos decimales 38.

En realidad, siempre se puede probar por ti mismo.

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

Me ampliar la respuesta de espectros para que las personas no tienen que probar por sí mismos.

Esto se hizo sobre la base de datos Oracle 11g Express Edition Release 11.2.0.2.0 -. Producción

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

que 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    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top