这就是我所拥有的:
功能规格:
FUNCTION GET_SOME_DATA RETURNS REF CURSOR
IN_LOOK_UP_PARAM VARCHAR2 IN
Java Code Snippet:
SimpleJdbcCall call =
new SimpleJdbcCall(jdbcTemplate)
.withCatalogName(SP_PACKAGE_NAME)
.withFunctionName("GET_SOME_DATA")
.declareParameters(
new SqlOutParameter(
SP_OUT_PARAM_RESULTS,
OracleTypes.CURSOR,
HEADER_ROW_MAPPER))
.declareParameters(new SqlParameter(SP_IN_PARAM, Types.VARCHAR))
.withoutProcedureColumnMetaDataAccess()
.withReturnValue()
.returningResultSet(SP_OUT_PARAM_RESULTS, HEADER_ROW_MAPPER);
call.setFunction(true);
call.compile();
Map<String, Object> resultMap = call.execute(
new MapSqlParameterSource().addValue(SP_IN_PARAM, lookupId));
不调用行映射器方法resultMap包含SP_OUT_PARAM_RESULTS
键,其值为null。
当试图调试它时,在Spring库代码中执行过程后的某个时刻,更新计数返回-1,因此跳过调用行映射器的代码路径。
知道我在oracle函数/ Simple Jdbc调用中错误地做了什么吗?
答案 0 :(得分:0)
我没有看到任何不会使该代码有效的内容。您的函数规范看起来不完整 - 您是否有完整的语句来创建函数?
尝试使用此功能:
CREATE OR REPLACE FUNCTION CURSOR_DEMO (p_in IN VARCHAR2) RETURN SYS_REFCURSOR
IS
p_cursor SYS_REFCURSOR;
BEGIN
open p_cursor FOR SELECT p_in AS P1 FROM DUAL;
RETURN p_cursor;
END CURSOR_DEMO;
使用此SimpleJdbcCall:
SimpleJdbcCall call = new SimpleJdbcCall(dataSource)
.withFunctionName("CURSOR_DEMO")
.declareParameters(
new SqlOutParameter("RESULTS", OracleTypes.CURSOR, new ColumnMapRowMapper()),
new SqlParameter("P_IN", Types.VARCHAR))
.withoutProcedureColumnMetaDataAccess();
SqlParameterSource params = new MapSqlParameterSource("P_IN", "TEST");
Map<String, Object> results = call.execute(params);
System.out.println(results);