修改Number类型的字段的精度SQL
ALTER TABLE XXXX MODIFY RATE NUMBER(30,6);
如果表已经存在数据,报错信息如下:
ORA-01440: column to be modified must be empty to decrease precision or scale
废话不多说,解决方案如下:
1、备份数据表
CREATE TABLE XXXX_NEW AS SELECT * FROM XXXX;
XXXX:数据表名,XXXX_NEW:新数据表名
2、添加临时字段
ALTER TABLE XXXX ADD RATE_TMP NUMBER(30,6);
临时字段精度确保为需要调整的进度
3、复制旧字段数据到临时字段
UPDATE XXXX SET RATE_TMP = RATE;
4、清除旧字段数据
UPDATE XXXX SET RATE = NULL;
5、修改旧字段精度
ALTER TABLE XXXX MODIFY RATE NUMBER(30,6);
6、将临时字段数据更新回旧字段
UPDATE XXXX SET RATE = RATE_TMP;
7、删除临时字段
ALTER TABLE XXXX DROP COLUMN RATE_TMP;
总结:此方案,借用过渡字段进行调整,别不是直接修改原有字段(前提需要确定数据字段精度是否兼容)。