结果是不是不能修改,还是改完后数据丢失??

解决方案 »

  1.   

    上网查到下面的这种方法,这方法是不是重新建一张表,然后删掉原表啊
    oracle中某表的字段设置为number(9),现欲改为Varchar2(5),但是库中有很多数据,怎样能保证数据不丢失,把类型改过来? 
    --------------------------------------------------------------- SQL> create table aaa (a number(9)); Table created. Elapsed: 00:00:00.32 
    SQL> insert into aaa values(999); 1 row created. Elapsed: 00:00:00.03 
    SQL> commit; Commit complete. Elapsed: 00:00:00.00 
    SQL> alter table aaa add b varchar2(5); Table altered. Elapsed: 00:00:00.17 
    SQL> update aaa set a=b; 1 row updated. Elapsed: 00:00:00.02 
    SQL> commit; Commit complete. Elapsed: 00:00:00.03 
    SQL> alter table aaa drop column a; Table altered. Elapsed: 00:00:00.52 
    SQL> alter table aaa rename column b to a; Table altered. Elapsed: 00:00:00.04 
    SQL> 
      

  2.   

    在原表中加入一个新的字段,是varchar2类型,把number的数据更新到这个字段中,再把老字段删除,再把这个字段的名字改为你原来的字段名
      

  3.   

    查到的另一种方法
    [code=SQL]/*修改原字段名*/   ALTER TABLE 表名 RENAME COLUMN 字段名 TO 字段名1;   /*添加一个和原字段同名的字段*/   ALTER TABLE 表名 ADD 字段名 VARCHAR2(30);   /*   将原来的数据更新到新字段中   这是要注意,一定要显示进行数据类型转换(不同于MSSQL)   */   UPDATE 表名 SET 字段名 = CAST(字段名1 AS VARCHAR2(30));   /*删除原来的备份字段*/   ALTER TABLE 表名 DROP COLUMN 字段名1; 
    code]
      

  4.   

    http://bbs.chinaunix.net/thread-102555-1-1.html
      

  5.   

    如果要建一个新表的话,可以这样做:1.在原表中加入一个新的字段,是varchar2类型,把number的数据更新到这个字段中,再把老字段删除,再把这个字段的名字改为你原来的字段名
    2.然后再创建新表,然后使用子查询 insert into 新表 values(值1,值2,...值n) select * from 原表,前提条件是所建的新表列的数据类型要和修改后的原表一至。