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 の uncategorized SQLException [{? = 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() この arraylist を取得しています。すべての値は null です。
何らかの理由?