Конфликт типа параметра при вызове хранимой процедуры Java в другой хранимой процедуре Java

Вот проблема (извините за плохой русский):

я работаю с JDeveloper и Oracle10g, и у меня есть хранимая процедура Java, которая вызывает другой JSP, например код:

int sd = 0;

try {
  CallableStatement clstAddRel = conn.prepareCall(" {call FC_RJS_INCLUIR_RELACAO_PRODCAT(?,?)} ");
  clstAddRel.registerOutParameter(1, Types.INTEGER);
  clstAddRel.setString(1, Integer.toString(id_produto_interno));
  clstAddRel.setString(2, ac[i].toString());
  clstAddRel.execute();

  sd = clstAddRel.getInt(1);
} catch(SQLException e) {
  String sqlTeste3 = "insert into ateste values (SQ_ATESTE.nextval, ?)";

   PreparedStatement pstTeste3 = conn.prepareStatement(sqlTeste3);
   pstTeste3.setString(1,"erro: "+e.getMessage()+ ac[i]);
   pstTeste3.execute();
   pstTeste3.close();
}

Я записываю ошибку в таблицу с именем ATESTE, потому что этот JavaSP является процедурой, а не функцией, мне нужно манипулировать DML внутри.

Итак, сообщение об ошибке, которое я получаю: "конфликт типа параметра"...

функция "FC_RJS_INCLUIR_RELACAO_PRODCAT" - это тоже хранимая процедура Java, она уже экспортирована в Oracle и возвращает переменную int, и я должен прочитать это, чтобы решить, какой веб-сервис я буду вызывать из этого JavaSP.

Я уже пробовал OracleTyep.NUMBER в registerOutParameter.

Кто-нибудь знает, что я делаю неправильно?


person GuiPereira    schedule 06.04.2010    source источник


Ответы (1)


Похоже, вам не хватает параметра в вашем вызове. Вы регистрируете выходной параметр Integer, а затем устанавливаете 2 строковых параметра. Я предполагаю, что ваша процедура FC_RJS_INCLUIR_RELACAO_PRODCAT возвращает целочисленное значение. Если это так, ваш код должен выглядеть примерно так:

CallableStatement clstAddRel = conn.prepareCall(" { ? = call FC_RJS_INCLUIR_RELACAO_PRODCAT(?,?)} ");
clstAddRel.registerOutParameter(1, Types.INTEGER);
clstAddRel.setString(2, Integer.toString(id_produto_interno));
clstAddRel.setString(3, ac[i].toString());
clstAddRel.execute();
person Doug Porter    schedule 07.04.2010
comment
На самом деле я набрал это неправильно, у него есть 3 параметра... я пробовал много вещей, но я решил эту проблему, изменив функцию на процедуру при экспорте из java в оракул... - person GuiPereira; 08.04.2010