2010-04-06 41 views
2

這裏的問題(對不起,我英文不好):我與JDeveloper和Oracle10g的工作「參數類型的衝突」當調用Java存儲過程中的另一個Java存儲過程

,和我有一個Java存儲過程被調用另一個JSP像代碼:

int sd = 0; 

try { 
    CallableStatement clstAddRel = conn.prepareCall(" {call FC_RJS_INCLUIR_RELACAO_PRODCAT(?,?)} "); 
    clstAddRel.registerOutParameter(1, Types.INTEGER); 
    clstAddRel.setString(1, Integer.toString(id_produto_interno)); 
    clstAddRel.setString(2, ac[i].toString()); 
    clstAddRel.execute(); 

    sd = clstAddRel.getInt(1); 
} catch(SQLException e) { 
    String sqlTeste3 = "insert into ateste values (SQ_ATESTE.nextval, ?)"; 

    PreparedStatement pstTeste3 = conn.prepareStatement(sqlTeste3); 
    pstTeste3.setString(1,"erro: "+e.getMessage()+ ac[i]); 
    pstTeste3.execute(); 
    pstTeste3.close(); 
} 

我記錄在一個名爲ATESTE表中的錯誤,因爲這JavaSP是一個過程,而不是一個功能,我已經來操縱DML內。

所以,我得到的錯誤信息是:「參數類型的衝突」 ......

功能「FC_RJS_INCLUIR_RELACAO_PRODCAT」這是一個Java存儲過程也是如此,它已經導出到Oracle,並返回一個int變量,並且我必須閱讀這個來決定我將從這個JavaSP調用哪個Web服務。

我已經嘗試過registerOutParameter中的OracleTyep.NUMBER。

任何人都知道我在做什麼錯?

回答

1

它看起來像你在呼叫中缺少一個參數。您註冊一個Integer輸出參數,然後設置2個字符串參數。我假設你的程序FC_RJS_INCLUIR_RELACAO_PRODCAT返回一個整數值。如果是這樣你的代碼應該看起來更像是這樣的:

CallableStatement clstAddRel = conn.prepareCall(" { ? = call FC_RJS_INCLUIR_RELACAO_PRODCAT(?,?)} "); 
clstAddRel.registerOutParameter(1, Types.INTEGER); 
clstAddRel.setString(2, Integer.toString(id_produto_interno)); 
clstAddRel.setString(3, ac[i].toString()); 
clstAddRel.execute(); 
+0

其實我已經輸入這個錯誤,它有3個參數...我已經嘗試了很多事情,但出口時,我解決了這個問題,改變功能的程序從java到oracle ... – GuiPereira 2010-04-08 11:32:45

相關問題