Oracle:number类型的使用

一、number(m,n)

  1. 创建测试表
    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));
  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;
  3. 查询,比对数值的不同
    select * from t1;

结论:

  • number:不做限制,保留数字
  • number(9):有效数值长度为九位,默认n=0,四舍五入至个位
  • number(9,2):有效数值长度为九位,精度为小数点后两位,所以数值不变
  • number(9,1):有效数值长度为九位,精度为小数点后一位
  • number(6):有效数值长度为六位,所以长度超了,插入数值异常
  • number(7,-2):有效数值长度七位,精度为小数点前两位,所以四舍五入至百位
  • number(7,2)):有效数值长度为七位,精度为小数点后两位,整数位最长长度为五位,小于插入的数值,插入数值异常

二、n>0

  1. 创建测试表
    create table t2(a number(3));
  2. 插入测试数据
    insert into t2 values(123.89);
    insert into t2 values(1230.89);
    insert into t2 values(12.89);
  3. select * from t2;
  4. 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

  1. 创建测试表
    create table t4 (a number(3,-1));
  2. 插入测试数据
    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,溢出

四、小数存储

  1. 创建测试表
    create table t5 (a number(3,5));
  2. 插入测试数据
    insert into t5 values(0.00123);
    insert into t5 values(0.000123);
  3. insert into t5 values(0.0001234);
  4. insert into t5 values(0.01234);

结论:

  • 0.0001234保留五位后为0.00012,有效位数为2,所以允许插入
  • 0.01234保留五位后为0.01234,有效位数为4,m=3,所以溢出,不允许插入