2017-10-17 137 views
0

我有以下存储过程,它接受三个参数并返回三个参考游标。在java spring中获取oracle存储过程结果集mvc

variable id refcursor 
variable item refcursor 
variable amount refcursor 
exec getdata(123,date1,date2, :id, :item, :amount) ; 

print id; 
print item; 
print amount; 

我有这个存储过程输出的三个结果集。我怎么能在春天mvc调用这个,并显示这三个结果集。我正在使用下面的代码通过sql查询获取数据。但是现在我开发了一个存储过程。所以我怎么能称这个SP输出insted我的查询输出。

public Optional<List<student>> getStudentDetails(String id) { 

NamedParameterJdbcTemplate parameterJdbcTemplate = new 
NamedParameterJdbcTemplate(dataSource); 

MapSqlParameterSource namedParameters = new MapSqlParameterSource(); 
namedParameters.addValue("Id", id); 

List<student> studentList = 
parameterJdbcTemplate.query(StudentQueryRepository.STUDENT_DETAIL_QUERY, 
namedParameters, new studentDecodeRowMapper()); 

if (studentList.isEmpty()) { 
return Optional.empty(); 
} else { 
return Optional.of(studentList); 
} 

} 
+0

如果不需要,请删除sql-server标记 – Tanner

回答

0

试试这个:

List<CommunicationContact> campaigns = jdbcTemplate.execute(
        new CallableStatementCreator() { 
         public CallableStatement createCallableStatement(Connection con) throws SQLException { 
          CallableStatement cs = con.prepareCall("{? = call MY_SERVICES.GET_CAMPAIGNS(?,?)}"); 
          cs.registerOutParameter(1, OracleTypes.CURSOR); 
          cs.setString(2, customer); 
          cs.setString(3, channel); 

          return cs; 
         } 
        }, 
        new CallableStatementCallback<List<CommunicationContact>>() { 

         @Override 
         public List<CommunicationContact> doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { 
          cs.execute(); 
          ResultSet rs = (ResultSet) cs.getObject(1); 
          List<CommunicationContact> communications = commContactRsExtractor.extractData(rs); 

          return communications; 
         } 
        } 
      ); 

而且我对数据库的函数:

FUNCTION GET_CAMPAIGNS(p_cust IN VARCHAR2, 
            p_channel IN VARCHAR2) 
    RETURN SYS_REFCURSOR 
    IS 
    l_campaigns_cursor SYS_REFCURSOR; 
    BEGIN 
     BEGIN 
     OPEN l_campaigns_cursor FOR 
     SELECT... 

     EXCEPTION 
     WHEN OTHERS THEN 
     ... 
     END; 

     RETURN l_campaigns_cursor; 
    END GET_CAMPAIGNS; 

相信随着OUT参数的存储过程也会起作用。

相关问题