工作时候由于某种原因需要将原来VARCHAR2
类型字段修改为NUMBER
类型,这里推荐一种数据量大的情况下比较快速的一种处理方法
执行步骤
假设目标表为table_name
,要修改的字段为cloumn
数据检测
先对cloumn
数据进行转换测试,是否都能转换为NUMBER
类型,处理不能转换的数据
SELECT TO_NUMBER(cloumn) FROM table_name
数据备份
创建数据备份表table_name_bak
CREATE TABLE table_name_bak AS SELECT * FROM table_name;
清空原表
TRUNCATE TABLE table_name;
修改字段类型
ALTER TABLE table_name MODIFY cloumn NUMBER(38);
禁用索引
如果表存在索引,则先禁用索引,这里假设索引为table_name_index
ALTER INDEX table_name_index UNUSABLE;
将备份表数据恢复到目标表
这里需要查询出所有字段,并使用TO_NUMBER()
函数转换数据类型,并保存到新表
INSERT INTO table_name ( ID, cloumn, ... ) SELECT ID, TO_NUMBER(cloumn), ... FROM table_name_bak;
恢复索引
ALTER INDEX table_name_index REBUILD;
查看索引状态
SELECT status FROM user_indexes WHERE index_name='table_name_index';
删除备份表
DROP TABLE table_name_bak;
评论区