我有一个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
我使用Spring StoredProcedure
类来调用此函数,如下所示:
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字符串,它正在跳过DeclapredParameter之一,因为它使用它来定义返回值...所以我最终少了一个“?”在Callable SQL字符串中。
这就像任何正常的Oracle函数一样,它返回一个refcursor和一个OUT参数,它接收4 IN参数。