oracle 怎么修改主键类型,要保证数据库的数据不变;主键ID 原来是NUMBER的,现在要改成VARCHAR2(32)的

解决方案 »

  1.   

    1.重新建一张表temp,要修改的字段ID类型设为VARCHAR2(32)
    2.复制数据到新表:  insert into temp select * from 旧表test
    3.删除旧表: drop table test
    4.修改新表temp为test : alter table temp rename to test
      

  2.   

    如果有外键关联,操作如下
    1.禁用约束
    alter table youtablename disable constraint contraintname;
    参考例子:
    select 'alter table '||table_name||' drop constraint '||constraint_name||';' from user_constraints where constraint_type='R'  
    禁用所有外键约束Sql代码
    select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R'  
    启用所有外键约束Sql代码
    select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R'  
    2.修改你的id的数据类型,如果不成功,你也可以使用上面的语句禁用主键约束
    alter table youname modify id varchar2(20);
    3.最后启动主键约束,同时删除外键约束,重新建立起约束关系,参考上面的的语句
      

  3.   

    -#alter table fyt_ntj_table7 modify( dzdx varchar2(10)); 
    --1.添加列add(newColumn varchar2(10)) 
    alter table fyt_ntj_table7 add(newColumn varchar2(10)); 
    --2.赋值newColumn = dzdx 
    update fyt_ntj_table7 set newColumn = dzdx; 
    commit; 
    --3.删除原来的列和列的约束drop column dzdx 
    alter table fyt_ntj_table7 drop column dzdx CASCADE CONSTRAINTS; 
    --4.重命名newColumn to dzdx 
    alter table fyt_ntj_table7 rename column newColumn to dzdx;
      

  4.   

    alter table test drop primary key;  -- 删除约束
    alter table test add constraint ID primary key(name); --修改约束