gpt4 book ai didi

java - 在另一个 Java 存储过程中调用 Java 存储过程时出现 "Parameter type conflict"

转载 作者:行者123 更新时间:2023-11-30 11:59:27 25 4
gpt4 key购买 nike

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

我正在使用 JDeveloper 和 Oracle10g,我有一个调用另一个 JSP 的 Java 存储过程,如代码:

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 调用哪个网络服务。

我已经在 registerOutParameter 中尝试了 OracleTyep.NUMBER。

谁知道我做错了什么?

最佳答案

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

关于java - 在另一个 Java 存储过程中调用 Java 存储过程时出现 "Parameter type conflict",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2585550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com