Как выполнить процедуру множественного возврата типов Oracle с Hibernate? - PullRequest
2 голосов
/ 22 марта 2012

Для отдельных типов вывода мой код работает нормально, но я не мог понять, как выполнить процедуру Oracle, которая имеет несколько выходных параметров и что будет выходным, т.е. ResultSet, Number и т. Д.

 abcProcedure(param1 OUT NUMBER,param2 OUT NUMBER,param3 OUT NUMBER,param4 OUT NUMBER,param5 IN OUT NUMBER, param6 IN NUMBER,param7 IN NUMBER)

HibernateКод:

 session.doWork(new Work(){

public void execute(Connection connection) throws SQLException {

CallableStatement callableStatement=connection.prepareCall("{call abcProcedure(?,?,?,?,?,?,?)}");


callableStatement.registerOutParameter(registerOutParameter,types.Numeric);

.......
callableStatement.execute();



}
}

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Наконец я решил это сам.Вот решение

callableStatement.registerOutParameter(1,types.Numeric); //1   index of Out parameter
callableStatement.registerOutParameter(2,types.Numeric); //2   index of Out parameter
callableStatement.registerOutParameter(3,types.Numeric); //3   index of Out parameter
callableStatement.registerOutParameter(2,types.Numeric); //4   index of Out parameter
callableStatement.registerOutParameter(5,types.Numeric); //5   index of Out parameter
callableStatement.setLong(5, (Long)value); // 5 is also  input parameter
callableStatement.setLong(6, (Long)value); // 6    input parameter
callableStatement.setLong(7, (Long)value); // 7    input parameter
callableStatement.execute();
callableStatement.getLong(1);// out put for param1 
callableStatement.getLong(2);// out put for param2
callableStatement.getLong(3);// out put for param3
callableStatement.getLong(4);// out put for param4
callableStatement.getLong(5);// out put for param5

В случае нескольких наборов результатов

callableStatement.getResultSet(); // will get the first ResultSet
callableStatement.getMoreResults();// will point to the next ResultSet
callableStatement.getResultSet();// will get the second ResultSet
..... So on

Вот так: -)

0 голосов
/ 07 декабря 2012

Используя приведенные выше комментарии, я смог решить проблему, связанную с моим проектом. Мне удалось вызвать хранимые процедуры с использованием фабрики сеансов. Код выглядит следующим образом.

    public double getQuant(String Cd, String Num) {
          double vTotRet = 0;
          double vTotCst = 0;
          double onOrdQty = 0;
                 Session sess = sessionFactory.openSession();
                 Connection conn = sess.connection();
                 CallableStatement callableStatement = conn.prepareCall("{call MyProcedure(?,?,?,?,?)}");
                 //Setting the first two parameters
                 callableStatement.setString(1,Num);
                 callableStatement.setString(2,Cd);
                 //Initializing the out parameters
                 callableStatement.registerOutParameter(3, Types.DOUBLE);                   
                 callableStatement.registerOutParameter(4, Types.DOUBLE);
                 callableStatement.registerOutParameter(5, Types.DOUBLE);
                 //Execute the stored procedure
                 callableStatement.execute();
                 vTotRet = callableStatement.getDouble(3);
                 vTotCst = callableStatement.getDouble(4);
                 onOrdQty = callableStatement.getDouble(5);
                 logger.info(onOrdQty);
                 return onOrdQty;
          }
...