ORA-06553: PLS-306: wrong number or types of arguments in call to 'xxxxxxx(proceduresName)'
阿新 • • 發佈:2019-02-14
昨天修改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程式中也要相應的改動
- ..............
- String procedure = "call sp_act_dayaccountamount(?,?,?,?,?,?,?,?,?)"; //多加一個引數
- cstmt = con.prepareCall(procedure);
- ..............
- ..............
- ..............
- cstmt.setLong(7, vo.getLedgerID());
- cstmt.setLong(8, vo.getCurrencyID());
- cstmt.registerOutParameter(
- cstmt.execute();
- //rs = cstmt.getResultSet();
- rs = (ResultSet)cstmt.getObject(9); //新加
- ..............
由於此程式資料庫操作使用的是hibernate,所以需要加入以上幾句,如註釋。並且在傳引數時要多加一個?,否則會
報“無效的列索引”。