默认的精度和等级的Oracle中的号码是什么?
-
09-09-2019 - |
题
当创建类型NUMBER的Oracle中的列中,你没有指定精度或标度的选择。什么,如果你不指定它们这些默认办?
解决方案
NUMBER(精度,小数)
如果未指定精度时,作为给定的列中存储的值。如果没有指定刻度,刻度为零。
在很多的详细信息:
http://download.oracle。 COM /文档/ CD / B28359_01 / server.111 / b28318 / datatype.htm#CNCPT1832
其他提示
在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
其中精度的数字和刻度的总数是数量 小数点的数字的左边或右边(负标度)。
甲骨文指定ORA-01438作为
值大于允许此列指定的精度较大
如表中所指出的,这个完整性检查是,如果精度唯一活性 明确规定。否则,甲骨文默默轮插入或更新 使用一些未指定的方法的值。
相信默认精度为38,默认比例为零。 然而此列的一个实例的实际大小,是动态的。根据需要来存储值,或最大21个字节这将需要尽可能多的空间。
Oracle
存储数以下列方式:1 byte
电源,1 byte
用于第一有效数位(即一个分离器之前),其余为其他数字
通过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)
)
;
select column_name, data_type, nullable, data_length, data_precision, data_scale
from user_tab_columns where table_name ='CUSTOMERS';
我对光谱的答案扩大使人们不必去尝试自己。
这是Oracle数据库11g快捷版发布11.2.0.2.0做 - 生产
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';
其中产量
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