转载,原文:http://tech.e800.com.cn/articles/2009/1030/1256867788831_1.html
oracle中数字类型有number,number可以存储小数的,如果是只想存储整数,建议声明为:pls_integer 或者是binary_integer或者是integer。
其中number类型的声明类型为number(精度,刻度),所谓精度我的理解就是从左侧第一个不为零的数字开始到开始四舍五入的位置的位数,刻度就是从小数点数几位开始进行四舍五入。刻度为正,表示小数点向后数,刻度为负,表示小数点向前数。
简单的举例来说:number(3,2)。
这个数据类型的精度为3位,精确到小数点后面2位。
如果有个变量这样声明:n_test number(3,2):=6.335;
那么oracle怎么判断这个类型的变量能否给赋这个值呢?总的来说是分三步进行的:
1. 根据刻度进行四舍五入:6.335——>6.34
2. 对上述值检查精度的位数为3
3. 检查结果不大于指定的精度,可以保存。
如果有个变量这样声明
n_test number(3,2):=63.355;
那么oracle怎么判断这个类型的变量能否给赋这个值呢?还是分三步来进行:
1. 根据刻度进行四舍五入:63.35——>63.36
2. 对上述值检查精度的位数为4
3. 检查结果大于指定的精度,不可以保存,Oracle会提示错误。
再举一个刻度为负的例子:number(3,-3)。
这个数据类型表示精度为3位,精确到小数点前面3位。
如果有个变量这样声明:n_test number(3,-3):=30541;那么Oracle怎么判断这个类型的变量能否给赋这个值呢?还是三步:
1. 根据刻度进行四舍五入:30541——>31000
2. 对上述值检查精度为2
3. 根据精度判断小于指定的精度,Oracle不报错,能保存。
如果有个变量声明如下:n_test number(1,-2):=45698;那么Oracle怎么判断这个类型的变量能否给赋这个值呢?还是三步:
1. 根据刻度进行四舍五入:45698——>45700;
2. 对上述检查精度为3
3. 根据精度检查大于指定的精度范围不能保存。