在工作中,有遇到金额的字段没有设置小数位(精度)的情况,致使金额保存的时候自动四舍五入,明明是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);
完毕(此仅供参考)!