RT:
   小弟学习Oracle不久,请问是否有方法可以更改表中的字段的数据精度Number(4,3)改为Number(4,4),此时表中的数据不丢失?? 多谢各位大哥,急!

解决方案 »

  1.   

    ALTER   TABLE 表名 modify 字段 number(4,4)
      

  2.   

    number(4,4)会把原来数据截断啊。
    比如原来存放的是1.234,那么而
    number(4,4)代表的是0.1234。
    除非要改为number(5,4)才不会
    丢失数据。
      

  3.   

    SQL> drop table t;表已删除。SQL> create table t (x number(4,3));表已创建。SQL> insert into t values(1.234);已创建 1 行。SQL> select * from t;         X
    ----------
         1.234SQL> alter table t modify x  number(4,4);
    alter table t modify x  number(4,4)
                         *
    第 1 行出现错误:
    ORA-01440: 要减小精度或标度, 则要修改的列必须为空
    SQL> alter table t modify x  number(5,4);表已更改。SQL> select * from t;         X
    ----------
         1.234SQL>
      

  4.   

    实践是检验真理的唯一标准,自己动手试试什么都知道了:
    1.如果有数据的话把Number(4,3)改为Number(4,4)会报错
    2.有数据的时候只能往大了改,不能改小,可以改成Number(5,3)
      

  5.   

    改成 Number(4,4)恐怕不成了  具体看下4楼
      

  6.   

    重新建一个number(4,4)的列,把number(4,3)列的数据update进去,然后把原来number(4,3)和新加的number(4,4)列的列名改一下。
      

  7.   

    把数据长度改小的情况下:
    直接 alter table t modify x  number(4,4); 
    或者界面操作时候肯定会提示: 列有数据不能修改的只能新建列,把要该列update到新列
    至于这个:number(4,4)会把原来数据截断啊。  
    比如原来存放的是1.234,那么而  
    number(4,4)代表的是0.1234。  
    除非要改为number(5,4)才不会  
    丢失数据。肯定同意