oracle 修改欄位型別的方法

paulyibinyi發表於2008-06-04

今天公司因為業務需要,修要修改某個欄位資料型別有number(5),變為number(5,2)型

要是沒有資料的話直接用以下語句即可

alter   table  tb_test  modify permile  number(5,2);

但是有資料的話 就不能用上面方法了,

alter table tb_test add permile_temp number(5,2)

update tb_test set  permile_temp=permile;

alter table drop column permile;

alter  table test rename column  permile_temp to permile;

這種方法會使列名發生變化,而且欄位順序增加 有可能發生行遷移,對應用程式會產生影響

以下方法是比較好的方法

不用使列名發生變化 也不會發生表遷移,但這個有個缺點是表要更新兩次

如果資料量較大的話 產生的undo和redo更多 ,前提也是要停機做

要是不停機的話 ,也可以採用線上重定義方式來做 

以下是指令碼:

alter table tb_test  add permile_temp number;
-- Add/modify columns
alter table  tb_test  modify PERMILE null;
update  tb_test  set permile_temp=permile,permile=null;
commit;
alter table  tb_test  modify permile number(5,2);
update  tb_test  set permile=permile_temp,permile_temp=null;
commit;
alter table  tb_test  drop column permile_temp;
alter table  tb_test  modify PERMILE not null;
select * from  tb_test ;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-331197/,如需轉載,請註明出處,否則將追究法律責任。

相關文章