You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向数值类型输入参数的存储过程传递NULL值报错问题

解决Java向Oracle存储过程传递NULL数值参数的类型转换错误

问题场景

在Spring DAO实现中,声明了P_PROGRAM_TERM_STG_ID为Types.NUMERIC类型的存储过程入参,当向该参数传入null值时,触发ORA-06502错误:字符转数值转换失败。

解决方案

方法1:用SqlParameterValue包装null值

直接传入null时,JDBC无法识别参数类型,会默认按字符串处理。改用SqlParameterValue明确指定参数类型,示例代码:

inParameters.put("P_PROGRAM_TERM_STG_ID", new SqlParameterValue(Types.NUMERIC, null));

这样驱动就能明确该null对应数值类型,避免类型转换错误。

方法2:手动指定null的SQL类型(直接操作CallableStatement时)

如果是手动处理CallableStatement,可以调用setNull方法指定类型:

callableStatement.setNull(参数索引, Types.NUMERIC);

问题原因

传递null值时,JDBC驱动无法自动推断参数的SQL类型,会默认以字符串类型绑定参数,但存储过程期望的是数值类型,因此触发了字符转数值的转换错误。明确指定null对应的SQL类型后,驱动就能正确完成参数绑定。

内容的提问来源于stack exchange,提问作者Daksharaj kamal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:18:19