oracle 10g 表字段类型的修改 如把某字段varchar2(200)改为Long类型,
只要记录中有数据,就不允许转换,有方法直接转换吗?本人的意思是直接把字段类型由varchar2改为Long的方法,
如果是新增一个字段再间接转换就不需要了,
意在探讨,我觉得这点Oracle设置有点不合理,如果是生产系统,记录上亿,
要借助一个间接字段来达到转换目的话,这种效率觉得无法忍让,
望各位指点,谢谢!

解决方案 »

  1.   

    直接转时有问题的,一个建议就是重新建表,将字段建成Long,然后将以前的数据导入新表中,这样就可以不用考虑varchar2类型和long类型了,因为可以将varchar2数据插入到LONG类型的字段,因为LONG类型的宽度要远远大于varchar2。
      

  2.   

    oracle的long确实一个棘手问题
    许多限制所以能不用尽量不用
      

  3.   

    SQL> create table t1(id varchar2(2000));
     
    Table created
    SQL> insert into t1 values('asdfasdfsadasdfasfdasdfsdafsadfasdfsadfasdfasdfjljasldfjsdaf');
     
    1 row inserted
     
    SQ 
    SQL> commit;
     
    Commit complete
     
    SQL> create table t2(id long);
     
    Table createdSQL> insert into t2 select id from t1;
     
    1 row inserted
     
    SQL> commit;
     
    Commit complete
     
    SQL> select * from t2;
     
    ID
    --------------------------------------------------------------------------------
    asdfasdfsadasdfasfdasdfsdafsadfasdfsadfasdfasdfjljasldfjsdaf
     
    SQL> 可以直接转换,但是varchar2有字符个数限制,好像是4000吧,不确认
      

  4.   

    oralce 好象任何类型的转换,只要记录中有数据了,就不能直接转换了。1楼的朋友说新建一表,对于过亿的生产系统来说,更加不可行。3楼的朋友可能还不太明白我的意思,如果是赋值,这样做是没问题的,我是想字段类型由Varchar2转换成Long类型,也就是说要用DDL语句更新表结构。
      

  5.   

    要直接通过修改字段类型
    以目前的oracel还做不到但用一楼的做法重新建表再导入
    我觉得是比直接在表里新建字段再update效率高的