Oracle 修改字段型別

2021-09-01 16:34:20 字數 1760 閱讀 5951

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); 

/* 將原來的資料更新到新字段中 

這是要注意,一定要顯示進行資料型別轉換(不同於mssql) 

*/ 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 ; 

其實也可以通過乙個寫乙個函式來實現通用的功能:修改表的字段型別。需要使用動態sql

Oracle修改字段型別

有乙個表名為tb,欄位段名為name,資料型別nchar 20 1 假設字段資料為空,則不管改為什麼字段型別,可以直接執行 alter table tb modify name nvarchar2 20 2 假設欄位有資料,則改為nvarchar2 20 可以直接執行 alter table tb ...

Oracle修改字段型別

gps平台 建設 軟體開發 系統運維,找森大網路科技!來自森大科技官方部落格 1 假設字段資料為空,則不管改為什麼字段型別,可以直接執行 alter table tb modify name nvarchar2 20 2 假設欄位有資料,則改為nvarchar2 20 可以直接執行 alter ta...

Oracle修改字段型別

1 假設字段資料為空,則不管改為什麼字段型別,可以直接執行 alter table tb modify name nvarchar2 20 2 假設欄位有資料,則改為nvarchar2 20 可以直接執行 alter table tb modify name nvarchar2 20 3 假設欄位有...