Reputation: 3246
I have Oracle function defined as:
function get_user_by_term (inUserTerm number) return number;
Now I wan to call this function using Spring SimpleJdbCCall but not sure how I can read return value since I don't have out param in function. I can't change the Oracle function code.
Code I have so far in Java is:
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);
Upvotes: 3
Views: 14646
Reputation: 4159
Calling executeFunction on the call worked for me, while i had to keep ".withProcedureName(...)" as it was. Check out your updated code:
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();
Upvotes: 0
Reputation: 3246
After research I found following:
withProcedureName()
method withFunctionName()
method should be used.execute()
method use executeFunction()
with return type parameter.So complete code be like
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();
Hope this will help others too.
Upvotes: 5