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;
实现效果: