2012-03-22 43 views
2

對於單輸出類型我的代碼工作正常,但我無法得到如何執行Oracle過程具有多個輸出參數以及會有怎樣的輸出即ResultSet中,編號等如何使用Hibernate執行多個返回類型Oracle過程?

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

最後我自己解決了。下面是解

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

使用上述評論我能解決與我的項目有關的問題。我能夠使用會話工廠調用存儲過程。代碼如下。

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; 
      } 
相關問題