在一次做开发的时候,遇到需要将数据表的字段类型由number改成varchar,可是该字段又有值,
用 alter table t-name modify cname newType;会报错。
话说,当时在网上没找到合适的解决办法,很苦恼!
今天在博客园看到解决这个问题的办法,很nice,分享!
当要修改的字段有值的时候,不能更改字段类型:
两种解决办法:
1、 > 新增一列,列类型与要修改的新类型一致;
>将旧列的值赋给新列(需强制类型转换);
> update tname set cname_new=cast(cname_old as 新类型)
>删除旧列。
这种办法,改变了列在表里面的位置。
2、 >新增一列,列类型与旧列相同;
>将旧列的值赋给新列,旧列的值变为null;
update tname set cname_new =cname_old;
> 更改旧列的字段类型(此时为null,可以修改)
alter table tname modify cname_old newType;
> 将新列的值赋给旧列;
update tname set cname_old=cname_new;
>删除新列。
相关sql语句:
查看oracle版本:select * from v$version;
更新字段名:alter table t-name rename column cname_old to cname_new;
新增字段: alter table t-name add cname type;
新增字段并赋值: alter table t-name add cname type default value;
删除字段: alter table t-name drop column cname;
修改字段值:update tname set cname=value where ...
修改字段类型: alter table t-name modify cname type;
参考:http://www.cnblogs.com/david-zhang-index/archive/2012/04/10/2441015.html