数字
数据类型 —— NUMBER
NUMBER类型可以保存几乎任何尺度的整数,定点数或者浮点数。NUMBER的算术运算使用一种与平台无关的方式实现的,无论底层硬件平台式什么样的,NUMBER的算术运算都会得到相同的结果。
Oracle数据库最多会分配能容纳40个数字的空间。NUMBER变量取值从 10(-130)到10(126)-1。
约束精度和刻度:
NUMBER(precision, scale)
声明的是一个定点数。其中precision是这个数值中总的有效数字的个数。scale表明小数点右面(正刻度)或者左面(负刻度)的数字个数。precison和scale两个值都必须是整数直接量。precesion的合法取值范围从1到38,scale的合法取值范围是从-84到127.
例如: NUMBER(9,2),这个变量的最大的取值是9 999 999.99:
表示整数值:
刻度scale是可选的,缺省值是0.
例如:
x NUMBER(9, 0);
x NUMBER(9);
都是包含9个有效数字的整数变量,取值范围为 -999 999 999到999 999 999
- 在声明中仅使用NUMBER,我们就可以表示浮点值
- 通过精度和刻度的约束,就可以表示定点小数
- 通过把刻度设置成0或者忽略它,可以表示整数值
数据类型 ——
数字子类型
Oracle同样提供了若干数字子类型。在多数情况下,这些子类型不过是之前讨论的那些基础类型的别名而已:
预定义的数字子类型:
子类型 | 兼容性 | 对应Oracle类型/注意事项 |
DEC(precision, scale) | ANSI | NUMBER(precision, scale) |
DECIMAL(precision, scale) | IBM | NUMBER(precision, scale) |
DOUBLE PRECISION | ANSI | NUMBER,精度达126个二进制数字 |
FLOAT | ANSI,IBM | NUMBER,精度达126个二进制数字 |
FLOAT(binary_precision) | ANSI,IBM | NUMBER,进度最多达126个二进制数字 |
INT | ANSI | NUMBER(38) |
INTEGER | ANSI,IBM | NUMBER(38) |
NATURAL | N/A | PLS_INTEGER,只允许非负值 |
NATURALN | N/A | 和NATURAL一样,但是一个额外的约束是不能为NULL |
NUMERIC(precision, scale) | ANSI | NUMBER(precision, scale) |
POSITIVE | N/A | PLS_INTEGER,只允许正数 |
POSITIVEN | N/A | 和POSITIVE一样,一个额外的约束是不能为NULL |
REAL | ANSI | NUMBER,精度达63个二进制数 |
SIGNTYPE | N/A | PLS_INTEGER,只能是 -1,0和1 |
SMALLINT | ANSI,IBM | NUMBER(38) |
数字操作