JDBC - вызов PLSQL из JAVA дает исключение Java.sql.SQLEx: ORA-06550 - PullRequest
0 голосов
/ 26 октября 2018

У меня огромные проблемы с моим вызовом PLSQL из Java.Вот мой код:

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 Ответ

0 голосов
/ 26 октября 2018
  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 и указать заполнитель для вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...