修改有数据的列的数据类型(例如将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()函数做一下转换。