如何使用SQL替换数据库表列的数据类型 且不修改原来列的值[Orcale]ORA-01439: column to be modified must be empty to change dataty

本文介绍了一种在不丢失数据的情况下,将数据库表中某列数据类型从VARCHAR转换为NUMBER的方法。通过新增列、复制数据、删除原列及重命名新列四步操作,成功实现了数据类型的变更,详细步骤包括ALTER TABLE语句的使用。
摘要由CSDN通过智能技术生成
Java资深小白,不足之处,或者有任何错误欢迎指出。	--蓝紫

如何实现修改一个列的数据类型,且不动原来的数据?

思路梳理
新增一个目标数据类型的新列
将原列数据复制到新列
删除原列
将新列名为原来的列名

按上述思路顺序操作即可实现不改变值的情况下,改变列的数据类型了。

实现(varchar切换为number)

下图所示,ASSETS_WAREHOUSE_KEEPE 表中字段WAREHOUSE_ID为字符类型,现在需要将不为空的VARCHAR改为不为空的NUMBER 数据类型。
在这里插入图片描述
如果直接手动修改为NUMBER保存报错:ORA-01439: column to be modified must be empty to change datatype
在这里插入图片描述
根据替换列的思路实现如下:

  • 新增一个number数据类型的新列:WAREHOUSE_ID_NEW
-- 新增一个列 
ALTER TABLE SC_WAREHOUSE.ASSETS_WAREHOUSE_KEEPER ADD (WAREHOUSE_ID_NEW NUMBER DEFAULT 1 NOT NULL);
-- 列说明
COMMENT ON COLUMN  SC_WAREHOUSE.ASSETS_WAREHOUSE_KEEPER.WAREHOUSE_ID_NEW
IS '仓库ID';
  • 将WAREHOUSE_ID列的数据copy到新列 WAREHOUSE_ID_NEW
-- 复制原数据到新列
UPDATE SC_WAREHOUSE.ASSETS_WAREHOUSE_KEEPER SET WAREHOUSE_ID_NEW = TO_NUMBER(WAREHOUSE_ID)
  • 删除原列 WAREHOUSE_ID
-- 复制原数据到新列
ALTER TABLE SC_WAREHOUSE.ASSETS_WAREHOUSE_KEEPER DROP COLUMN WAREHOUSE_ID
  • 修改WAREHOUSE_ID_NEW 名字为 WAREHOUSE_ID
-- 修改新列为原列
ALTER TABLE SC_WAREHOUSE.ASSETS_WAREHOUSE_KEEPER RENAME COLUMN  WAREHOUSE_ID_NEW TO WAREHOUSE_ID;

实现效果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值