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()函数做一下转换。
 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值