在ORACLE數據庫表中,有時會有需要更改數據庫表中字段類型的情況,比如由NUMBER(5)改為
VARCHAR(50)...,這時就要視情況來更改了,如果原數據庫表中沒有數據,則可以直接使用:
alter table test modify name VARCHAR2(50);
但是有數據的話 就不能用上面方法了,
alter table test add name_temp number(5);
update test set name_temp=name;

alter table drop column name;

alter table test rename column name_temp to name;

這種方法會使列名發生變化,而且字段順序增加 有可能發生行遷移,對應用程序會產生影響
以下方法是比較好的方法
不用使列名發生變化 也不會發生表遷移,但這個有個缺點是表要更新兩次
如果數據量較大的話 產生的undo和redo更多 ,前提也是要停機做
要是不停機的話 ,也可以采用在線重定義方式來做
以下是腳本:
alter table test add name_temp number(5);

update test set name_temp=name,name=null;

alter table test modify name VARCHAR2(50);
update test set name=name_temp,name_temp=null;
commit;
alter table test drop column name_temp;
desc test;

這樣就不會出現上述的問題了.
posted on 2009-03-04 11:42
henry1451 閱讀(845)
評論(0) 編輯 收藏