Call Oracle Stored Procedure and Map refcursor results in r2dbc

79 Views Asked by At

I have been asked to create a Proof Of Concept on an Online Shopping Application. This application exposes an Flux API in spring boot.

class UserMasterInfo{
   private List<Orders> orderHistory;
   private List<Address> userAddresses;
   private List<Review> userReviews;
   private List<PaymentMode> paymentModes;
   private Subscription superSubscription;
   private User userDetail;

   //getters and setters
   //overridden tostring

}

My stored procedure returns 6 different cursor containing data for each of the attributes in UserMasterInfo. I did some basic ground work and map one ref cursor. But I couldnt understand how to map rest of the refcursors. Some help on this will be really useful.

public class DataRepository{

    @Autowired
    private R2dbcEntityTemplate template;

    @Autowired
    private DatabaseClient databaseClient;

    @Autowired
    private MappingR2dbcConverter converter;
   
   public Flux<UserMasterInfo> getUserMasterInfo(){
        String query = "stored proc query";

        return databaseClient.inConnectionMany(
            connection -> {
                Statement statement = connection.createStatement(query)
                .bind("order_hist",Parameters.out(OracleR2dbcTypes.REF_CURSOR));

                return Flux.from(statement.execute())
                        .flatMap(result -> result
                            .map(outParameters -> outParameters.get("order_hist")))
                        .cast(Result.class)
                        .flatMap(result -> result.map(
                            row -> converter.read(Orders.class,(Row) row)));
                        

            });
   }
}

Anyone know how to do multi cursor mapping?

0

There are 0 best solutions below