日期:2014-05-16  浏览次数:20484 次

oracle的number类型精度、刻度范围 [转]

一、 oracle number 类型精度、刻度范围

number(p,s)

p: 1---38
s: -84---127

有效数位 :从左边第一个不为 0 的数算起,到末位数字为止的所有数字,小数点和负号不计入有效位数。

p>0
,对 s 3 种情况:
1.s>0

精确到小数点右边 s 位,并四舍五入 。然后检验有效数位是否 <= p

ZWF.YUDONG>create table t_n(id number(5,2));
Table created.
? --
小数点前面最多只能有 3 位,小数点后面位数可以任意多

ZWF.YUDONG>insert into t_n values(123.45);
1 row created.

ZWF.YUDONG>insert into t_n values(123.455);
1 row created.


ZWF.YUDONG>insert into t_n values(12.345);
1 row created.

ZWF.YUDONG>insert into t_n values(1.234);
1 row created.

ZWF.YUDONG>insert into t_n values(.001);
1 row created.

ZWF.YUDONG>select * from t_n;
?? ??? ID
----------
? 123.45
? 123.46

12.35

1.23

0.00

5 rows selected.

ZWF.YUDONG>insert into t_n values(1234.5678); ? --
有效位为 4 + 2 > 5
insert into t_n values(1234.5678)
?? ?? ?? ?? ?? ?? ??? *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column


ZWF.YUDONG>insert into t_n values(12345); ? --
有效位为 5 + 2 > 5
insert into t_n values(12345)
?? ?? ?? ?? ?? ?? ??? *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column