私は以下のようなOracle関数を持っています:
FUNCTION GetDetails (Acct_No IN VARCHAR2, Qtype IN VARCHAR2, MaxRecs IN NUMBER DEFAULT 500, Debug IN NUMBER DEFAULT 0, p_ErrorCode OUT NUMBER) RETURN SYS_Refcursor
以下のように、SpringStoredProcedure
クラスを使用してこの関数を呼び出しています。
public GetDetailsStoredProcedure(JdbcTemplate jdbcTemplate, int type) {
super(jdbcTemplate, "GetDetails");
RowMapper<?> rowMapper = new CadreAuthorizationRowMapper();
setFunction(true);
declareParameter(new SqlReturnResultSet(Constants.FUN_OUT_RESULT_LIST, rowMapper));
declareParameter(new SqlParameter(Constants.FUN_IN_CARD_NUMBER, OracleTypes.VARCHAR));
declareParameter(new SqlParameter(Constants.FUN_IN_REQ_TYPE, OracleTypes.VARCHAR));
declareParameter(new SqlParameter(Constants.FUN_IN_MAX_REC, OracleTypes.NUMERIC));
declareParameter(new SqlParameter(Constants.FUN_IN_DEBUG, OracleTypes.NUMERIC));
declareParameter(new SqlOutParameter(Constants.FUN_OUT_ERROR_CODE, OracleTypes.NUMERIC));
compile();
}
私が抱えている問題は、Spring がすべての DeclaredParameters を使用して SQL 文字列を準備していないことです。DeclaredParameter の 1 つをスキップして、それを使用して戻り値を定義しているため、最終的に「?」が 1 つ少なくなります。呼び出し可能な SQL 文字列で。
これは、refcursor と OUT パラメータを返し、4 つの IN パラメータを受け取る通常の Oracle 関数と同様です。