2015-06-08 4 views
1

У меня есть функция Oracle определяется как:Получение возвращаемого значения из функции оракула, используя SimpleJdbcCall

function get_user_by_term (inUserTerm number) return number; 

Теперь я тусклый, чтобы вызвать эту функцию с помощью Spring SimpleJdbCCall, но не знаю, как я могу читать возвращаемое значение, так как у меня нет вне функции. Я не могу изменить код функции 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

После исследований я обнаружил следующее:

  1. Вместо withProcedureName() метод withFunctionName() метод должен быть использован.
  2. Вместо execute() способ использование executeFunction() с возвратом type параметр.

Так полный код будет как

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(); 

Надеется, что это поможет другим тоже.

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(); 
Смежные вопросы