Oracle 对于已有数据的列修改字段类型

修改有数据的列的数据类型(例如将MHC_FETALRECORD表的fetalheartrate列由number修改为varchar2(20))

ALTER TABLE MHC_FETALRECORD ADD temp NUMBER;  --新建备份列
UPDATE MHC_FETALRECORD SET temp = fetalheartrate; --将目标列的数据复制到备份列中
UPDATE MHC_FETALRECORD SET fetalheartrate = NULL; --将目标列的数据清空
alter table MHC_FETALRECORD modify fetalheartrate VARCHAR2(20); --更改目标列的数据类型
UPDATE MHC_FETALRECORD SET fetalheartrate = temp; --将备份列的数据还原到目标列
ALTER TABLE MHC_FETALRECORD DROP COLUMN temp; --删除备份列。全部步骤完成!

--总结:能够这么做的根本原因是,oracle varchar2和number数据类型之间的update存在隐式转换。
--经过测试,所有number类型都可以成功转换成varchar2;反之则不尽然,例如varchar2'三十'就不能转换为number。

概括了一个通用的模板:


alter table 表名 modify 列名 目标数据类型;  

可套用模板,替换一下变量:
    ALTER TABLE 表名 ADD temp 目标数据类型;  --新建备份列
    UPDATE 表名 SET temp = 列名; --将目标列的数据复制到备份列中
    UPDATE 表名 SET 列名 = NULL; --将目标列的数据清空
    alter table 表名 modify 列名 目标数据类型; --更改目标列的数据类型
    UPDATE 表名 SET 列名 = temp; --将备份列的数据还原到目标列
    ALTER TABLE 表名 DROP COLUMN temp; --删除备份列。

对于目标数据类型为DATE的情况,还需要用TO_DATE()函数做一下转换。
 

你可能感兴趣的:(oracle,数据库)