5 ответов:
число (точность, масштаб)
Если точность не задана, то в столбце сохраняются заданные значения. Если масштаб не указан, он равен нулю.
намного больше информации по адресу:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832
The
NUMBERтип может быть определен в различные стили: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где точность-это общее количество цифр, а масштаб-количество цифры справа или слева (отрицательная шкала) десятичной точки.
Oracle указывает ORA-01438 как
значение больше указанной точности, разрешенной для этого столбца
Как указано в таблице, эта проверка целостности активна только в том случае, если точность есть явно указать. В противном случае Oracle молча округляет вставленный или обновленный значение с использованием некоторого неопределенного метода.
Я считаю, что точность по умолчанию составляет 38, шкала по умолчанию равна нулю. Однако фактический размер экземпляра этого столбца является динамическим. Это займет столько места, сколько необходимо для хранения значения, или максимум 21 байт.
Oracleсохраняет числа следующим образом:1 byteвласти,1 byteдля первой значащей цифры (то есть одной перед разделителем), остальные для других цифр.By
digitsздесьOracleозначаетcentesimal digits(то есть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как мы видим, максимальное число здесь
7.(7) * 10^124, и он19сотенные цифры для точности, или38десятичных цифр.
на самом деле, вы всегда можете проверить это самостоятельно.
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) ) ;выберите столбец column_name, data_type принадлежит, допускает data_length, data_precision, data_scale от user_tab_columns где table_name = 'CUSTOMERS';
Comments