call an oracle stored procedure that has an IN OUT SYS_REFCURSOR parameter at the same with java

434 views Asked by At

I am trying to call a stored procedure in oracle that has a SYS_REFCURSOR as IN OUT at the same time. But I am getting the following error:

Stored procedure

PROCEDURE TRADSS_DEVOLUCION(pi_id_transaccion in number,
                            pio_cur_traducido  IN OUT SYS_REFCURSOR) IS

   ve_err_msg                     VARCHAR2(2000);
BEGIN
.
.
.

Repository

        try (CallableStatement callableStatement = 
            connection.prepareCall("call OPERATOR.PKG_TRANSLATE.TRADSS_EVOLUTION(?,?)")){

            callableStatement.setString(1, idTrx);
            callableStatement.registerOutParameter(2, OracleTypes.CURSOR);

            List<Data> listData = new ArrayList<>();
            ResultSet rst = (ResultSet) callableStatement.getObject(2); // here throw the exception

            while (rst.next()) {
                .
                .
                .

            }
            response.setLista(listData);
        }catch (Exception ex){
            ex.printStackTrace();
            log.error("Error in service: {}", ex.getMessage());
        }
        return response;

Exception

java.sql.SQLException: Invalid column index
    at oracle.jdbc.driver.OracleCallableStatement.getObject(OracleCallableStatement.java:1745)
    at oracle.jdbc.driver.OracleCallableStatementWrapper.getObject(OracleCallableStatementWrapper.java:639)
    at org.davidmoten.rx.jdbc.pool.internal.ConnectionNonBlockingMemberCallableStatement.getObject(ConnectionNonBlockingMemberCallableStatement.java:299)
    at pe.com.claro.maverick.service.support.sga.repository.impl.SgaRepositoryImpl.findTranslate(SgaRepositoryImpl.java:72)
0

There are 0 answers