1,如果隻是單純的把字段改大,比如numeric (16,2)--->numeric (16,4) ,可直接
alter table 表名 modify ( 字段名 numeric (16,4)
2,由于需求變動,現要将一個類型NUMBER(8,2)的字段類型改為 char。
大體思路如下:
将要更改類型的字段名改名以備份,然後添加一個與要更改類型的字段名同名的字段(原字段已經改名),然後更新資料,最後删除改名備份的字段。
以下操作在 Oracle 10.2.0.1.0 中通過。
ALTER TABLE 表名 RENAME COLUMN 字段名 TO 字段名1;
ALTER TABLE 表名 ADD 字段名 VARCHAR2(30);
UPDATE 表名 SET 字段名 = CAST(字段名1 AS VARCHAR2(30));
ALTER TABLE 表名 DROP COLUMN 字段名1;
其他方案:
今天公司因為業務需要,修要修改某個字段資料類型有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 ;