Oracle修改Number类型精度报错:ORA-01440

修改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;

总结:此方案,借用过渡字段进行调整,别不是直接修改原有字段(前提需要确定数据字段精度是否兼容)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值