整理 Oracle 修改字段型別

2021-08-31 06:02:30 字數 1622 閱讀 5494

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 ;

Oracle修改字段型別

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

Oracle 修改字段型別

1,如果只是單純的把字段改大,比如numeric 16,2 numeric 16,4 可直接 alter table 表名 modify 欄位名 numeric 16,4 2,由於需求變動,現要將乙個型別number 8,2 的字段型別改為 char。大體思路如下 將要更改型別的欄位名改名以備份,然...

Oracle修改字段型別

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