数字,数字(3),数字(3,2)之间有什么区别

时间:2015-09-01 14:53:47

标签: database oracle

我知道他们之间的基本区别,我想知道

如果我没有指定精度和比例并将数据类型定义为数字 分配的精度和比例的默认值是什么?

create table a(id number);

create table b(id number(3));

以上两个查询都会创建一个包含column和number数据类型的表但与之有什么不同 1)性能观点 2)数据库如何在内部处理它 3)将数字指定为数字类型而不是数字(3)

是否有任何优势

1 个答案:

答案 0 :(得分:0)

从Oracle的角度回答......

NUMBER数据类型

NUMBER数据类型存储零以及正和负固定数字,绝对值从1.0 x 10-130到(但不包括)1.0 x 10126.如果指定一个算术表达式,其值的绝对值大于或等于等于1.0 x 10126,然后Oracle返回错误。每个NUMBER值需要1到22个字节。

使用以下格式指定定点数:

NUMBER(p,s)

其中:

p是精度或有效小数位的总数,其中最高有效位是最左边的非零数字,最低有效位是最右边的已知数字。 Oracle保证数字的可移植性,精度最高可达20个基数-100位,相当于39或40个十进制数字,具体取决于小数点的位置。

s是从小数点到最低有效位的小数位数或位数。比例范围可以从-84到127。

正尺度是小数点右边的有效数字,包括最低有效数字。

负标度是小数点左边的有效位数,但不包括最低有效位。对于负比例,最小有效数字位于小数点的左侧,因为实际数据四舍五入到小数点左侧的指定位数。例如,(10,-2)的规范意味着舍入到数百。

比例可以大于精度,最常见的是使用e表示法。当scale大于precision时,precision指定小数点右侧的最大有效位数。例如,定义为NUMBER(4,5)的列要求小数点后第一个数字为零,并将所有值舍入小数点后的第五个数字。

优良作法是指定定点数列的比例和精度,以便对输入进行额外的完整性检查。指定比例和精度不会强制所有值都固定长度。如果值超过精度,则Oracle返回错误。如果某个值超过了该比例,那么Oracle会对其进行舍入。

使用以下格式指定整数:

NUMBER(p)

这表示一个定点数,精度为p,标度为0,相当于NUMBER(p,0)。

使用以下格式指定浮点数:

NUMBER 

缺少精度和比例指示符指定了Oracle编号的最大范围和精度。

NUMBER[(precision [, scale]])

具有精度p和比例s的数字。精度p的范围可以是1到38.标度s的范围可以从-84到127