在Oracle中创建NUMBER类型的列时,可以选择不指定精度或小数位数。如果您不指定这些默认值,它们会做什么?
发布于 2009-02-27 02:18:42
数字(精度,小数位数)
如果未指定精度,则列按给定的方式存储值。如果未指定比例,则比例为零。
有关更多信息,请访问:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832
发布于 2009-02-27 01:37:02
我相信默认精度是38,默认小数位数是0。但是,此列的实例的实际大小是动态的。它将根据需要占用尽可能多的空间来存储值,或最多21个字节。
发布于 2009-03-02 17:34:53
Oracle
按以下方式存储数字:1 byte
表示幂,1 byte
表示第一个有效数字(即分隔符之前的一个),其余数字表示其他数字。
这里的digits
指的是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
个小数位数。
https://stackoverflow.com/questions/593197
复制相似问题