轉(zhuǎn)自:https://blog.csdn.net/gdjlc/article/details/23762549
有一個表名為tb
音念,字段名為name
等恐,數(shù)據(jù)類型nchar(20)
途样。
1壹甥、假設(shè)字段數(shù)據(jù)為空,則不管改為什么字段類型,可以直接執(zhí)行:
alter table tb modify (name nvarchar2(20));
2贬循、假設(shè)字段有數(shù)據(jù)咸包,則改為nvarchar2(20)可以直接執(zhí)行:
alter table tb modify (name nvarchar2(20));
3、假設(shè)字段有數(shù)據(jù)杖虾,則改為varchar2(40)執(zhí)行時會彈出:“ORA-01439:要更改數(shù)據(jù)類型,則要修改的列必須為空”烂瘫,這時要用下面方法來解決這個問題:
- 修改原字段名name為name_tmp
alter table tb rename column name to name_tmp;
- 增加一個和原字段名同名的字段name
alter table tb add name varchar2(40);
- 將原字段name_tmp數(shù)據(jù)更新到增加的字段name
update tb set name=trim(name_tmp);
- 更新完,刪除原字段name_tmp
alter table tb drop column name_tmp;
總結(jié):
1奇适、當(dāng)字段沒有數(shù)據(jù)或者要修改的新類型和原類型兼容時坟比,可以直接modify修改。
2嚷往、當(dāng)字段有數(shù)據(jù)并用要修改的新類型和原類型不兼容時葛账,要間接新建字段來轉(zhuǎn)移。