1. 程式人生 > >ORA-06553: PLS-306: wrong number or types of arguments in call to 'xxxxxxx(proceduresName)'

ORA-06553: PLS-306: wrong number or types of arguments in call to 'xxxxxxx(proceduresName)'

昨天修改bug中遇到的問題

執行的操作是用java程式呼叫procedures,資料庫採用oracle。

但是在java呼叫此存過後,執行時console中報了以下錯誤:

java.lang.Exception: java.sql.SQLException: ORA-06553: PLS-306: wrong number or types of arguments in call to 'SP_ACT_DAYACCOUNTAMOUNT'

在網上搜遍結果,還是沒有好的辦法。最終由同事幫忙解決。

原因是傳遞引數有問題,由於此oracle是由db2移植來的,所以在原先的基礎上增加了一個out引數用於返回,因此引數有原先的8個變為9個。引數中多了vCur out sys_refcursor 這麼一行

最終解決辦法是:

因此java程式中也要相應的改動

  1. ..............
  2. String procedure = "call sp_act_dayaccountamount(?,?,?,?,?,?,?,?,?)";  //多加一個引數
  3. cstmt = con.prepareCall(procedure);
  4. ..............
  5. ..............
  6. ..............
  7. cstmt.setLong(7, vo.getLedgerID());
  8. cstmt.setLong(8, vo.getCurrencyID());
  9. cstmt.registerOutParameter(
    9, OracleTypes.CURSOR);  //新加
  10. cstmt.execute();
  11. //rs = cstmt.getResultSet();
  12. rs = (ResultSet)cstmt.getObject(9);   //新加
  13. ..............

由於此程式資料庫操作使用的是hibernate,所以需要加入以上幾句,如註釋。並且在傳引數時要多加一個?,否則會

報“無效的列索引”。