我将Oracle函数定义为:
function get_user_by_term (inUserTerm number) return number;
现在我想使用Spring SimpleJdbCCall来调用这个函数,但不知道如何读取返回值,因为我没有函数中的param。我无法更改Oracle功能代码。
到目前为止我在Java中的代码是:
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(dataSource)
.withSchemaName("SCHMA").withCatalogName("PKG_USER")
.withProcedureName("get_user_by_term");
Map<String, Object> inParamMap = new HashMap<String, Object>();
inParamMap.put("inUserTerm ", userTermId );
SqlParameterSource in = new MapSqlParameterSource(inParamMap);
simpleJdbcCall.execute(in);
答案 0 :(得分:0)
经过研究,我发现了以下内容:
withProcedureName()
方法withFunctionName()
方法。execute()
方法使用带有返回类型参数的executeFunction()
。完整的代码就像
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(dataSource)
.withSchemaName("SCHMA").withCatalogName("PKG_USER")
.withFunctionName("get_user_by_term");
Map<String, Object> inParamMap = new HashMap<String, Object>();
inParamMap.put("inUserTerm ", userTermId );
SqlParameterSource in = new MapSqlParameterSource(inParamMap);
Long userId = simpleJdbcCall.executeFunction(BigDecimal.class, in).longValue();
希望这也有助于其他人。
答案 1 :(得分:0)
在通话中调用executeFunction为我工作,而我必须保持“.withProcedureName(...)”原样。查看更新后的代码:
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(dataSource)
.withSchemaName("SCHMA")
.withCatalogName("PKG_USER")
.withProcedureName("get_user_by_term");
MapSqlParameterSource inParams = new MapSqlParameterSource()
.addValue("inUserTerm ", userTermId );
Long returnVal = simpleJdbcCall.executeFunction(BigDecimal.class, inParams).longValue();