ORACLE表里有记录,现在想修改表的某个字段的数据类型,该怎么改?

解决方案 »

  1.   


    SQL> create table t(col_1 number(5));
     
    Table created
     
    SQL> alter table t modify col_1 varchar2(10);
     
    Table altered
     
    SQL> --没有数据--如果表中有数据,那么另外创建一个表
    --将此表中的数据添加进去
      

  2.   

    给你说下大概思路,自己学习操作,
    个人觉得,有数据的情况下,最合理的方法是:1.增加一个新列FLAG1
    2.UPDATE BIAO SET FLAG1 = 需要修改类型的字段;
    3.update biao set 需要修改的字段 = ''; 
    4.修改字段类型;
    5.update 表 set 需要修改的字段=flag1;
    6,DROP FLAG1
      

  3.   

    带有记录的表,修改字段类型,有很多主意事项:
    1.同类型的只可以扩展长度,不可以缩减精度
    2.没有约束的数据类型(long,clob,blob,row除外)可以转换为字符型,精度足以存放当前数据类型的长度SQL> create table t(col_1 varchar2(10 char),col_2 date);
     
    Table created
     
    SQL> 
    SQL> insert into t(col_1,col_2)
      2  values('qwertyuiop',to_date('2011-01-01','yyyy-mm-dd'));
     
    1 row inserted
    SQL> insert into t(col_1,col_2)
      2  values('1023546.78',to_date('2010-05-04','yyyy-mm-dd'));
     
    1 row inserted
     
    SQL> commit;
     
    Commit complete
     
    SQL> alter table t modify col_1 number(10);
     
    alter table t modify col_1 number(10)
     
    ORA-01439: column to be modified must be empty to change datatype
     
    SQL> alter table t modify col_1 varchar2(15);
     
    Table altered
     
    SQL> alter table t modify col_2 varchar2(15);
     
    alter table t modify col_2 varchar2(15)
     
    ORA-01439: column to be modified must be empty to change datatype
     
    SSQL> alter table t modify col_1 varchar2(5);
     
    alter table t modify col_1 varchar2(5)
     
    ORA-01441: cannot decrease column length because some value is too big