簡體   English   中英

JDBC-從JAVA調用PLSQL會給出Java.sql.SQLException:ORA-06550

[英]JDBC - Calling PLSQL from JAVA gives Java.sql.SQLException: ORA-06550

我從Java調用PLSQL遇到了很大的麻煩。 這是我的代碼:

static final String PLSQL = "{call DBK_PDG_METADATI_CEDOLINO.dbp_main(?,?,?,?,?,?,?,?,?)}";

Connection conn = DataSourceUtils.getConnection(jdbcTemplate.getDataSource());
CallableStatement cs = conn.prepareCall(PLSQL);

    for (Cedolino item : items) {
        LOG.info("################# ELABORAZIONE CEDOLINO " + item.getTestata().getAnagrafica().getCodFiscaleAmministrato() + " #################");
        cedolini.getCedolino().add(item);
        setParametersForPlSql(cs, item);

        try{
            cs.execute();
        }catch(SQLException e){
            LOG.info(e.toString());
        }

    }

cs.close();
conn.close();

private void setParametersForPlSql(CallableStatement cs, Cedolino ced){

    try {
        cs.setInt("tipo_lancio", 1);
        cs.setString("iscr", ced.getTestata().getTrattamento().getIscrizione().trim());
        cs.setString("rts", ced.getTestata().getDpt().trim());
        cs.setString("codfisc", ced.getTestata().getAnagrafica().getCodFiscaleAmministrato().trim());
        cs.setString("lingua", this.lingua);
        cs.setString("file_name", null);
        cs.setString("dir_spec", null);
        cs.setString("stato_elab", "S");
        cs.setString("descr_elab", null);


    } catch (SQLException e) {
        e.printStackTrace();
    }

}

這段代碼除了cs.execute之外效果很好,這給了我這個錯誤

java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'DBP_MAIN'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

我檢查了一千遍,參數,類型和數字是否完全匹配。 數據庫連接也很好,因為我先進行了一些緩存,然后工作了。

已經嘗試刪除DBK_PDG_METADATI_CEDOLINO但是不需要任何操作。 你能幫我弄清楚嗎?

  1. 問題可能與可能不支持命名參數的JDBC驅動程序有關。

嘗試先檢查它,例如:

  Connection myConn = . . .   // connection to the RDBMS for Database
  DatabaseMetaData dbmd = myConn.getMetaData();
  if (dbmd.supportsNamedParameters() == true)
  {
      System.out.println("NAMED PARAMETERS FOR CALLABLE"
                        + "STATEMENTS IS SUPPORTED");
  }

如果不是,請使用參數索引而不是名稱進行設置...

  1. 該存儲過程中是否有任何OUT或INOUT參數?

如果是這樣,你需要注冊使用這些參數registerOutParameter中的CallableStatement ,並給予輸出的占位符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM