我正在尝试使用Spring JDBC执行SQL函数。Spring JDBC和Oracle函数问题
我的代码是
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;未分类SQLException for SQL [{? = call RATELIMIT_OWN.GET_LOGS()}]; SQL状态[99999];错误代码[17041];在index :: 1处缺少IN或OUT参数; 嵌套的异常是java.sql.SQLException:在org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate上的index :: 1处缺少IN或OUT参数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)在有机springframework.jdbc.core.simple.AbstractJdbcCall.executeCallInternal(AbstractJdbcCall.java:388)在org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute(AbstractJdbcCall.java:351)在org.springframework.jdbc.core.simple。 SimpleJdbcCall.executeFunction(SimpleJdbcCall.java:154)
我不明白为什么它会抛出这个错误。对于准备好的语句,我们声明输入和输出参数并对它们进行编译。但对于功能,怎能当我们把它当作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()将此ArrayList的所有值都为空。
的原因吗?
你可以分享你的Sql函数的原型吗? –
加入SQL函数 – Reddy