请教各位大大,今天看资料发现
1234567.89 Number(6) 出错,这是为什么呢?如果理解为1234567.89的整数部分大于6,所以出错的话,那么1234567.89 Number(5,-2)为什么能输出1234600呢,1234567.89的整数部分不是也大于5吗?是因为(5,-2)可以变相理解为整数部分为7吗?还有个问题
1234567.89 Number(7,2) 出错     为什么会出错呢?整数部分7,小数精确到2,不是应该输出1234567.89吗?

解决方案 »

  1.   

    前面的7表示总共允许7个字符长,称为宽度。后面2是保留小数点后面两位,称为精度。一般说来,长度要包含精度,但不包含小数点,比如number(7,2)能表示的最大数是99999.99。但是也有少数数据库的长度包含了小数点的。
      

  2.   

    Number(m,n)m是总长度,不是整数部分的长度
      

  3.   

    SQL> create table t1(col1 number(6),col2 number(5,-2),col3 number(7,2));Table created.
    SQL> insert into t1(col1) values(1234567.89);
    insert into t1(col1) values(1234567.89)
                                *
    ERROR at line 1:
    ORA-01438: value larger than specified precision allowed for this column
    SQL> insert into t1(col1) values(123456.89); --小数部分取整 进位到个位 6变71 row created.SQL> select * from t1;      COL1       COL2       COL3
    ---------- ---------- ----------
        123457SQL> insert into t1(col2) values(1234567.89); --这里我的理解是这样的 number(5,-2) 整数部分的位数是5-(-2)=7 -2代表向整数部分方向取整2位 因此十位上的6被取整进一 百位上的5变6了1 row created.SQL> select * from t1;      COL1       COL2       COL3
    ---------- ---------- ----------
        123457
                  1234600
    SQL> insert into t1(col3) values(12345.89);1 row created.SQL> insert into t1(col3) values(123456.89);--整数部分和小数部分6+2=8了 超过7 所以不行
    insert into t1(col3) values(123456.89)
                                *
    ERROR at line 1:
    ORA-01438: value larger than specified precision allowed for this column
    SQL> select * from t1;      COL1       COL2       COL3
    ---------- ---------- ----------
        123457
                  1234600
                            12345.89