在一次做開發的時候,遇到需要將數據表的字段類型由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 表名 rename column 舊列名 to 新列名;
新增字段: alter table 表名 add 列名 列類型;
新增字段並賦值: alter table 表名 add 列名 列類型 default 默認值;
刪除字段: alter table 表名 drop column 列名;
修改字段值:update 表名 set 列名=value where ...
修改字段類型: alter table 表名 modify 列名 類型;
參考:http://www.cnblogs.com/david-zhang-index/archive/2012/04/10/2441015.html
