昨天修改bug中遇到的問題 java
執行的操做是用java程序調用procedures,數據庫採用oracle。 sql
可是在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
在網上搜遍結果,仍是沒有好的辦法。最終由同事幫忙解決。 spa
緣由是傳遞參數有問題,因爲此oracle是由db2移植來的,因此在原先的基礎上增長了一個out參數用於返回,所以參數有原先的8個變爲9個。參數中多了vCur out sys_refcursor 這麼一行 hibernate
最終解決辦法是: code
所以java程序中也要相應的改動 索引
.............. String procedure = "call sp_act_dayaccountamount(?,?,?,?,?,?,?,?,?)"; //多加一個參數 cstmt = con.prepareCall(procedure); .............. .............. .............. cstmt.setLong(7, vo.getLedgerID()); cstmt.setLong(8, vo.getCurrencyID()); cstmt.registerOutParameter(9, OracleTypes.CURSOR); //新加 cstmt.execute(); //rs = cstmt.getResultSet(); rs = (ResultSet)cstmt.getObject(9); //新加 ..............
因爲此程序數據庫操做使用的是hibernate,因此須要加入以上幾句,如註釋。而且在傳參數時要多加一個?,不然會報「無效的列索引」。 get