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

调用Oracle存储过程时JDBC丢失参数的问题排查

问题原因与解决方案

核心错误

你误用了withReturnValue()方法——这个方法是为Oracle函数(FUNCTION)设计的,函数本身会返回一个值,而你调用的是存储过程(PROCEDURE),存储过程没有返回值,只有定义的IN/OUT参数。添加withReturnValue()后,Spring会自动在调用语句中插入一个返回值占位符? = call ...,同时错误地减少了OUT参数的占位符数量,导致生成的调用语句{? = call MY_PROCEDURE(?)}只包含一个参数占位符,和存储过程需要的两个OUT参数不匹配,最终抛出语法错误。

修正后的代码

移除withReturnValue()配置即可,正确的SimpleJdbcCall代码如下:

SimpleJdbcCall simpleJdbcCall = simpleJdbcCallFactory.create()
                .withProcedureName("MY_PROCEDURE")
                .withoutProcedureColumnMetaDataAccess()
                .declareParameters(new SqlOutParameter("TAB1_CNT", Types.NUMERIC),
                        new SqlOutParameter("TAB2_CNT", Types.NUMERIC));
simpleJdbcCall.execute();

额外注意点

检查你的存储过程定义,当前代码中PROCEDURE关键字后缺少存储过程名称(应该是create or replace NONEDITIONABLE PROCEDURE MY_PROCEDURE (),虽然你说SQL调用正常,但建议确认定义的正确性,避免后续其他问题。

内容的提问来源于stack exchange,提问作者Arli Chokoev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:52:10