Oracle修改字段类型不必清空数据的案例

在工作中,有遇到金额的字段没有设置小数位(精度)的情况,致使金额保存的时候自动四舍五入,明明是100.5元,最后保存在表中却变成101(当初也不知道自己怎么智障的没有设置字段精度)。

查看字段类型

在这里插入图片描述
如果直接修改字段类型为NUMBER(22,8),会提示

在行: 4 上开始执行命令时出错 -
alter table ar_gatheritem modify NOUTPUTVALUEMNY NUMBER(22,8)
错误报告 -
ORA-01440: 要减小精度或标度, 则要修改的列必须为空
01440. 00000 -  "column to be modified must be empty to decrease precision or scale"
*Cause:    
*Action:

原本想先把字段的值复制到备用字段,然后情况NOUTPUTVALUEMNY 的值,再修改数据,再把原来的值复制回来。但是查资料有说如果修改后的字段类型和修改前的字段类型是兼容的,是可以不用清空就可以直接修改类型的。

由 NUMBER(22,0) => NUMBER(22,8),整形的添加精度应该是可以的呀?

然后我突然意识到,NUMBER()的第一个参数是指整数位+小数位的总长度,如果改为NUMBER(22,8),那岂不是修改后的字段的整数位长度变成22-8=14,相比原来的22位变小了,所以正确的字段类型应该是NUMBER(30,8),这样才能保证整数长度为22不变。

alter table ar_gatheritem modify NOUTPUTVALUEMNY NUMBER(30,8);

在这里插入图片描述

完毕(此仅供参考)!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值