关于oracle 数据类型number(p,s)
遇到一个面试题正式考number类型的,当时有点懵,事后赶紧查了查,在数据库上验证一遍。
参考博客:https://blog.csdn.net/IT_jinxing/article/details/77159519
参考博客:https://blog.csdn.net/dongmenshiyu/article/details/51578996
number类型详细
简称:precision --> p
scale --> s
NUMBER(p, s)
范围: 1 <= p <= 38,
-84 <= s <= 127
p为有效位:从左边第一个不为0的数算起的位数。
s的情况:
s > 0
精确到小数点右边s位,并四舍五入。然后检验有效位是否 <= p。
s < 0
精确到小数点左边s位,并四舍五入。然后检验有效位是否 <= p + |s|。
s = 0
此时NUMBER表示整数。
如果没有指定precision的话,Oracle将使用38 作为精度。 scale默认设置为0。
number数据类型面试题:
结果是:
1、 12.34
2、 错误
3、错误
4、 0
5、 12
6、 12.3
如果要存入的数 比字段类型最大值还大,就会报错了。 如果是存入的值的小数位超过了数据类型的小数位,那么就会进行四舍五入预算,在将数据存储。
测试代码:
create table test1(
a number(5,2),
b number(4,3),
c number(3,4),
d number(5,-2),
e number(5,0),
f number(5,1)
)
truncate table test1 ;
insert into test1
select 12.34,null,null,null,null,null from dual ;
insert into test1
select null,12.34,null,null,null,null from dual;
insert into test1
select null,null,12.34,null,null,null from dual;
insert into test1
select null,null,null,12.34,null,null from dual;
insert into test1
select null,null,null,null,12.34,null from dual;
insert into test1
select null,null,null,null,null,12.34 from dual;
select * from test1;
最后的查询结果如下:其中第2,3条insert 插入失败。只能够查出4条记录。