oracle “java.sql. SQLExException:索引处缺少IN或OUT参数::调用函数时为1”

xv8emn3q  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(116)

当调用SimpleJdbcCall.withFunctionName时,我得到java.sql.SQLException: Missing IN or OUT parameter at index:: 1

SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(myDataSource)
.withCatalogName("package_name")
.withFunctionName("x");
String res = simpleJdbcCall.executeFunction(String.class, in);

字符串
SimpleJdbcCall参数为:

MapSqlParameterSource in = new MapSqlParameterSource();

in.addValue("1", "a", Types.VARCHAR);
in.addValue("2", b, Types.NUMERIC);
in.addValue("3", c, Types.VARCHAR);
in.addValue("4", "d", Types.VARCHAR);
in.addValue("5", e, Types.NUMERIC);
in.addValue("6", "f", Types.VARCHAR);
in.addValue("7", g, Types.NUMERIC);
in.addValue("8", h, Types.NUMERIC);
in.addValue("9", null, Types.NUMERIC);


Oracle函数声明:

function x(1 in varchar2,
2 in number,
3 in varchar2,
4 in varchar2,
5 in number,
6 in varchar2,
7 in number default null,
8 in number default null,
9 in number default null) return varchar2 is


在我看来,我所做的一切都是按照documentation来做的。只有我的Oracle函数中的参数没有声明为in

的数据

xriantvc

xriantvc1#

我有这个问题。我不得不通过添加.withoutProcedureColumnMetaDataAccess()来关闭元数据访问,如下所示:

SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate)
            .withSchemaName("ar_pcmh.pcmh_prvdr_rqst_pkg")
            .withFunctionName("test_fnctn")
            .withoutProcedureColumnMetaDataAccess()
            .useInParameterNames("p_integer")
            .declareParameters(
                    new SqlParameter("p_integer", Types.INTEGER),
                    new SqlOutParameter("result", Types.INTEGER)        
            );

字符串

相关问题