2017-10-17 9 views
0

3つのパラメータを取り、3つのREFカーソルを返す次のストアドプロシージャがあります。oracleを取得するJavaスプリングのストアドプロシージャの結果セット

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

print id; 
print item; 
print amount; 

このストアドプロシージャの出力には、3つの結果セットがあります。どのように私は春のmvcでこれを呼び出すことができ、これらの3つの結果セットを表示することができます。私は、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; 

は、私は、パラメータを持つストアドプロシージャも動作することを信じています。

関連する問題