一、问题描述
java.sql.SQLDataException: ORA-01438: value larger than specified precision allowed for this column
二、问题百度
1、错误说明
ORA-01438,发生此错误的原因在于我们插入的数据长度超过了字段指定的字段长度,比如插入的数据为 102329204123.33829492,小数点前长度为 12,小数点后长度为 8,若字段字符类型指定为 Number(19,12),那么在插入时则就会报错。
2、oralce 的 Number()规则
首先说下 oralce 的 Number()在插入数据时遵循的规则:
设字段字符类型为 Number(a,b),其中 a>b,在插入数据时,整数部分长度最大不能超过 a-b,小数部分长度如果大于 b,则截取 b 长度的小数存入数据库,其余的将被舍弃。
如刚才我们所举的例子,19-12=7,只能存入整数位长度小于或等于 7 的数据,大于 7 时则就会报错。
3、解决办法
故解决办法就是修改 Number(a,b)中的 a,使其保障存入数据的整数位长度小于 a 即可。
三、问题实例
1、问题截图
2、问题描述
总保额实际传入 13 位
测试环境数据库 15 位
生产环境数据库 11 位
生产环境字段长度不够
3、问题解决
修改生产环境数据库该字段长度
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于