【问题标题】:"Parameter type conflict" when calling Java Stored Procedure within another Java Stored Procedure在另一个 Java 存储过程中调用 Java 存储过程时出现“参数类型冲突”
【发布时间】:2010-04-06 14:26:30
【问题描述】:

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

我正在使用 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。

谁知道我做错了什么?

【问题讨论】:

    标签: java oracle jdeveloper


    【解决方案1】:

    您的调用中似乎缺少一个参数。您注册一个整数输出参数,然后设置 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();
    

    【讨论】:

    • 其实我打错了,它有 3 个参数...我尝试了很多东西,但我解决了这个问题,从 java 导出到 oracle 时将函数更改为过程...
    猜你喜欢
    • 2020-03-09
    • 2014-09-17
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2011-05-05
    相关资源
    最近更新 更多