使用SimpleJdbcCall从oracle函数获取返回值

时间:2015-06-08 19:40:06

标签: java spring oracle

我将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);

2 个答案:

答案 0 :(得分:0)

经过研究,我发现了以下内容:

  1. 应使用withProcedureName()方法withFunctionName()方法。
  2. 而不是execute()方法使用带有返回类型参数的executeFunction()
  3. 完整的代码就像

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