標籤:style blog http color strong io 資料 問題
在一次做開發的時候,遇到需要將資料表的欄位類型由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