2011-03-08 62 views
1

我公司開發的SP,說美國廣播公司(A,B,C),其中如何從前端設置INOUT參數,而調用存儲過程

  • 一個在參數
  • b爲OUT參數
  • c是INOUT參數。

如果我叫直接從數據庫中該SP爲abc(<val>,?,?),我得到犯錯

The number of variables in the EXECUTE statement, the number of variables in the OPEN statement, or the number of arguments in an OPEN statement for a parameterized cursor is not equal to the number of values required.

但是,如果我運行它abc(<val>,?,<val>),它成功運行。

我想通過Java程序調用這個SP。爲此,我設置IN & INOUT參數。並註冊OUT & INOUT參數。但是它給了我與上面相同的錯誤

回答

2

您需要使用java.sql.CallableStatement來處理參數。

所以,下面你的榜樣,您的通話將是:

String sql = "{ call abc(?, ?, ?) }"; 
CallableStatement cs = conn.prepareCall(sql); 
cs.setInt(1, 20); // setting "a" in parameter to 1 
cs.registerOutParameter(2, Types.VARCHAR); // setting "b" as out parameter 
cs.setString(3, "Some String"); // setting "c" as in parameter 
cs.registerOutParameter(3, Types.VARCHAR); // setting "c" as out parameter 
// then execute 
cs.executeUpdate(); 
// and retrieve out parameters 
String bout = cs.getString(2); 
String cout = cs.getString(3); 
+0

definetly我使用的CallableStatement。沒有這個,我不知道另一種叫SP的方式。我的問題是如何設置INOUT參數? – 2011-03-08 09:29:00

+0

@articlestack:如果您已經使用CallableStatement,那麼只需閱讀它的文檔並使其運行即可。 – 2011-03-08 09:32:53

+0

我按照建議的方式進行操作。而且我正面臨下面的錯誤:「EXECUTE語句中的變量數量,OPEN語句中的變量數量或OPEN語句中參數化遊標的參數數量不等於需要的值數量。」 – 2011-03-08 09:59:46

5
+1

我知道這是一個很晚的回覆,但是訪問這個頁面的人會更好地理解 – 2012-04-02 07:08:31

+0

它幫了我+1 – rajesh 2013-01-21 13:47:15

+0

非常好。我也幫助過我 – 2014-11-22 00:02:28

相關問題