tipos tamaño soporta que numerico number maneja formato datos database oracle number-formatting

database - tamaño - ¿Cuál es la precisión y escala por defecto para un número en Oracle?



tamaño number oracle (5)

Creo que la precisión predeterminada es 38, la escala predeterminada es cero. Sin embargo, el tamaño real de una instancia de esta columna es dinámico. Se necesitará tanto espacio como sea necesario para almacenar el valor, o un máximo de 21 bytes.

Al crear una columna de tipo NUMBER en Oracle, tiene la opción de no especificar una precisión o escala. ¿Qué hacen estos valores predeterminados si no los especifica?


El tipo NUMBER se puede especificar en 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

Donde la precisión es el número total de dígitos y la escala es el número de dígitos a la derecha 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 observa en la tabla, esta verificación de integridad solo está activa si la precisión se especifica explícitamente. De lo contrario, Oracle redondea silenciosamente el valor insertado o actualizado utilizando algún método no especificado.


En realidad, siempre puedes probarlo tú 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) ) ;

seleccione column_name, data_type, nullable, data_length, data_precision, data_scale de user_tab_columns donde table_name = ''CLIENTES'';



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

Por digits aquí Oracle significa centesimal digits (es decir, 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 tiene 19 dígitos centesimales para precisión, o 38 dígitos decimales.