oraclenumber整数,Oracle number类型的语法和⽤法
Oracle number类型的语法很简单,就是:
number(p,s)
p,s都是可选的,假如都不填,p默认为38,s默认为-48~127。oracle decimal类型
1. 精度(precision),或总位数。默认情况下,精度为38位,取值范围是1~38之间。也可以⽤字符*表⽰38。
2.
⼩数位置(scale),或⼩数点右边的位数。⼩数位数的合法值为-48~127,其默认值取决于是否指定了精度。如果没有知道精度,⼩数位数则默认有最⼤的取值区间。如果指定了精度,⼩数位数默认为0(⼩数点右边⼀位都没有)。例如,定义为NUMBER的列会存储浮点数(有⼩数),⽽NUMBER(38)只存储整数数据(没有⼩数),因为在第⼆种情况下⼩数位数默认为0.
如下SQL语句:
create table t ( msg varchar2(12.), num_col number(5,2) );
insert into t (msg,num_col) values ( '123.456', 123.456
);//执⾏成功,保存的是123.46
insert into t (msg,num_col) values ( '1234', 1234
);//执⾏失败,要保留2位⼩数,那么整数位最多3位,现在是4位。
如果scale是负数怎么样,表⽰左边整数位舍⼊⼏位:
create table t ( msg varchar2(12.), num_col number(5,-2) );
insert into t (msg,num_col) values ( '123.45', 123.45
);//执⾏成功,保存的是100
insert into t (msg,num_col) values ( '123.456', 123.456
);//执⾏成功,保存的是100
其他数据类型:
1. NUMERIC(p,s):完全映射⾄NUMBER(p,s)。如果p未指定,则默认为38.
2. DECIMAL(p,s)或DEC(p,s):完全映射⾄NUMBER(p,s)。如果p为指定,则默认为38.
3. INTEGER或INT:完全映射⾄NUMBER(38)类型。
4. SMALLINT:完全映射⾄NUMBER(38)类型。
5. FLOAT(b):映射⾄NUMBER类型。
6. DOUBLE PRECISION:映射⾄NUMBER类型。
7. REAL:映射⾄NUMBER类型。
性能考虑:
⼀般⽽⾔,Oracle NUMBER类型对⼤多数应⽤来讲都是最佳的选择。不过,这个类型会带来⼀些性能影响。Oracle
NUMBER类型是⼀种软件数据类型,在Oracle软件本⾝中实现。我们不能使⽤固有硬件操作将两个NUMBER类型相加,这要在软件中模拟。不过,浮点数没有这种实现。将两个浮点数相加时,Oracle会使⽤硬件来执⾏运算。
换⽽⾔之,将⼀些列的number列相加,没有将⼀系列float列相加来得快。因为float列的精度低很多,⼀般是6~12位。
⽐如:select sum(ln(cast( num_type as binary_double ) )) from t ⽐:select sum(ln(cast( num_type) )) from t 要快很多。