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