Oracle与ADF执行查询报错:Missing IN or OUT parameter at index::2
排查Oracle+ADF中SQL参数缺失错误的原因及解决办法
错误原因
你的SQL查询明确定义了两个绑定变量::p_zipcode_cur和:p_index,但从日志的params: [220051]可以看到,执行查询时仅传入了1个参数。Oracle JDBC驱动要求所有绑定变量都必须被赋值,因此找不到第二个参数(JDBC参数索引从1开始,索引2对应第二个变量),抛出Missing IN or OUT parameter at index:: 2错误。
解决办法
- 检查ADF绑定配置:在ADF的Page Definition文件或Application Module实现类中,确认该查询的两个绑定变量
p_zipcode_cur和p_index都已正确配置参数来源,比如关联页面输入组件、后台Bean属性或固定值。 - 核对参数传递代码:如果是通过Java代码手动执行该SQL(如使用
PreparedStatement或ADF的DBTransaction),检查代码是否遗漏了对:p_index的赋值。示例:// 错误:仅设置了一个参数 pstmt.setLong(1, 220051); // 正确:为两个变量分别赋值 pstmt.setLong(1, zipcodeCurValue); // 对应:p_zipcode_cur pstmt.setInt(2, indexValue); // 对应:p_index - 验证变量名一致性:确保SQL中的变量名与ADF配置/代码中使用的名称完全一致,注意ADF绑定变量名可能区分大小写,需严格匹配。
- 调整动态参数逻辑:如果
:p_index是动态生效的参数,不要直接在SQL中写条件分支,而是通过ADF视图对象的动态过滤条件或动态SQL构建工具处理,避免出现变量未绑定的情况。
内容的提问来源于stack exchange,提问作者Yevgeniy
相关产品推荐
相关产品推荐

