Oracle可以兼容多种存储数值的数据类型,如integer,number,decimal,numberic,float,double,binary_float和binary_float等,但推荐使用NUMBER类型,因为NUMBER几乎可以表示任何复杂的数值数据,也建议在数据库开发规范中明确统一使用NUMBER数据类型来表示数值。
NUMBER类型的用法如下:
定义格式NUMBER(precision,scale)
precision表示数字中的有效位(从左边第一个不为0的数算起,小数点和负号不计入有效位数),取值范围从1到38 默认38
scale表示精确到多少位,取值范围是从-84到127 默认值取决于precision,如果没有指定precision,那么s是最大范围,如果指定了precision,那么s=0
大于零时,表示数字精确到小数点右边的位数;小于零时,将把该数字取舍到小数点左边的指定位数
所以,NUMBER整数部分允许的长度为(precision- scale),无论scale是正数还是负数,
如果precision小于scale,表示存储的是没有整数的小数
关于number p s参数遵循以下规则:
当一个数的整数部分的长度> p-s 时,Oracle就会报错
当一个数的小数部分的长度> scale时,Oracle就会舍入
当scale为负数时,Oracle就对小数点左边的s个数字进行舍入
当scale> precision时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错
看一下举例: