Arithmetic overflow error converting numeric to data type numeric错误解决

文章讲述了在遇到JavaSQLSQLException由于数值溢出导致的错误时,问题源于尝试插入的数值超过了数据库表中定义的decimal字段容量。解决方案是通过ALTERTABLE命令增加字段item_qty的长度,从decimal(9,4)改为decimal(12,5),确保字段能容纳实际业务中的数值。作者强调设计表结构时应充分考虑字段类型和长度以适应业务需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近,发现一个定时任务报错,报错日志如下:

java.sql.SQLException: Arithmetic overflow error converting numeric to data type numeric. Query: insert into #tmp_smart_retl_chg(store_id,item_nbr,transaction_date,sequence_nbr,dept_nbr,TRANSACTION_TIME,EVENT_ID,ITEM_QTY,ITEM_QTY_INT,reason_code,item_name,status,try_times,create_time) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?) Parameters: [[1154, 981066872, 2023-03-05, 1, 99, 22:09:07, 1814, 134638.56000, 2000, SC, 透明HMS盒-底, 0, 0, 2023-03-05 23:50:00.0], [4754, 981066872, 2023-03-05, 2, 99, 22:09:07, 1814, 134148.00000, 2000, SC, 透明HMS盒-底, 0, 0, 2023-03-05 23:50:00.0]]

排查发现,原来是 ITEM_QTY 这个字段的值太大,超出定义的长度了,故出现数值溢出。

表定义的字段类型为:
[item_qty] decimal(9,4) NULL,

最大只能容下5位整数及4位小数,

而实际插入字段数值为134638.56000,有6位整数5位整数,超过其规定限制,故报错。

解决方案:
变更表结构,扩大字段长度,

--修改tmp_smart_retl_chg表 item_qty 字段长度
ALTER TABLE tmp_smart_retl_chg ALTER COLUMN item_qty decimal(12,5);

变更后字段容量,7位整数+5位小数,

总结:
后续设计表结构,字段类型及长度,一定要根据实际业务,给字段预留充足的空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值