我正在尝试使用 Spring JDBC 执行 SQL 函数。
我的代码是
SimpleJdbcCall caller = new SimpleJdbcCall(this.jdbcTemplateRandOnline).withCatalogName("RATELIMIT_OWN").withFunctionName("Get_Logs");
RateLimitLogBean resultBean = null;
SqlParameterSource paramMap = new MapSqlParameterSource().addValue(P_YYYYMM, inputBean.getMonth(), Types.VARCHAR).addValue(P_NUMEC, inputBean.getNumec(), Types.INTEGER);
resultBean = caller.executeFunction(RateLimitLogBean.class, paramMap);
但是当我运行这段代码时,我遇到了错误
org.springframework.jdbc.UncategorizedSQLException: CallableStatementCallback; SQL [{? = 调用 RATELIMIT_OWN.GET_LOGS()}]; SQL 状态 [99999];错误代码 [17041];索引处缺少 IN 或 OUT 参数:: 1; 嵌套异常是 java.sql.SQLException: Missing IN or OUT parameter at index:: 1 at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate (AbstractFallbackSQLExceptionTranslator.java:80) 在 org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1030) 在 org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1064) 在 org.springframework。 jdbc.core.simple.AbstractJdbcCall.executeCallInternal(AbstractJdbcCall.java:
我不明白为什么它会抛出这个错误。对于准备好的语句,我们声明输入和输出参数并编译它们。但是对于函数,当我们将它作为 SqlParamSource 传递时,我们如何编译
Sql 函数
FUNCTION RATELIMIT_OWN.Get_Logs ( p_yyyymm VARCHAR2, p_numec NUMBER )
此函数返回类型的记录
TYPE RATELIMIT_OWN.LOG_RECORD AS OBJECT
(EVENTID VARCHAR2(15),
MSG VARCHAR2(2000),
CREATE_DATE DATE);
我已经调试到 Spring 框架。我发现的是,在
org.springframework.jdbc.core.metadata.CallMetaDataContext.reconcileParameters 方法,我得到 this.metaDataProvider.getCallParameterMetaData() 这个数组列表,所有值都是空的。
任何原因?