Oracle:number类型的使用
一、number(m,n)
- 创建测试表
create table t1(
a number,
b number(9),
c number(9,2),
d number(9,1),
e number(6),
f number(7,-2),
g number(7,2)); - 插入测试数据
insert into t1 (a) values (1234567.89);
update t1 set b=1234567.89;
update t1 set c=1234567.89;
update t1 set d=1234567.89;
update t1 set e=1234567.89;
update t1 set f=1234567.89;
update t1 set g=1234567.89; - 查询,比对数值的不同
select * from t1;
结论:
- number:不做限制,保留数字
- number(9):有效数值长度为九位,默认n=0,四舍五入至个位
- number(9,2):有效数值长度为九位,精度为小数点后两位,所以数值不变
- number(9,1):有效数值长度为九位,精度为小数点后一位
- number(6):有效数值长度为六位,所以长度超了,插入数值异常
- number(7,-2):有效数值长度七位,精度为小数点前两位,所以四舍五入至百位
- number(7,2)):有效数值长度为七位,精度为小数点后两位,整数位最长长度为五位,小于插入的数值,插入数值异常
二、n>0
- 创建测试表
create table t2(a number(3)); - 插入测试数据
insert into t2 values(123.89);
insert into t2 values(1230.89);
insert into t2 values(12.89); - select * from t2;
- create table t3(a number(3,1));
insert into t3 values(123.1);
insert into t3 values(132);
结论:由于n=1,小数点后一位也属于有效位,所以123.1有4位有效位,数值溢出
三、n<0
- 创建测试表
create table t4 (a number(3,-1)); - 插入测试数据
insert into t4 values(123.123);
insert into t4 values(123);
insert into t4 values(1234);
insert into t4 values(12345);
结论:
- 1234四舍五入后变成1230,虽然长度为4,但是有效长度m=3,允许插入
- 12345四舍五入后变成12350,m=4,溢出
四、小数存储
- 创建测试表
create table t5 (a number(3,5)); - 插入测试数据
insert into t5 values(0.00123);
insert into t5 values(0.000123); - insert into t5 values(0.0001234);
- insert into t5 values(0.01234);
结论:
- 0.0001234保留五位后为0.00012,有效位数为2,所以允许插入
- 0.01234保留五位后为0.01234,有效位数为4,m=3,所以溢出,不允许插入