ORA-06553: PLS-306: wrong number or types of ar...

昨天修改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

相關文章
相關標籤/搜索