在另一个Java存储过程中调用Java存储过程时出现“参数类型冲突”

时间:2010-04-06 14:26:31

标签: java oracle jdeveloper

这是问题(抱歉英语不好):

我正在使用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调用哪个webservice。

我已经尝试过registerOutParameter中的OracleTyep.NUMBER。

任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分: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();