gpt4 book ai didi

java - 使用带有 boolean IN 参数的 CallableStatement 在 Java 中调用 Oracle PL/SQL 过程会产生 PLS-00306 oracle 错误 :

转载 作者:搜寻专家 更新时间:2023-10-30 20:59:18 25 4
gpt4 key购买 nike

我在 Oracle 11g 上有一个 pl/sql 过程,它具有以下参数:

PROCEDURE validate_product
( product_id_in IN varchar2 ,
username_in in varchar2,
source_in varchar2,
source_id_in varchar2 ,
isEuProduct in boolean ,
error_code out varchar2,
product_type out varchar2
)

我正在尝试使用以下代码从 java 中调用上述存储过程:

cstmt = getConnection().prepareCall("begin " + DBUtil.SCHEMANAME + ".PRODUCT_UTILITIES.validate_product(:1,:2,:3,:4,:5,:6,:7); end;");

cstmt.registerOutParameter(6, Types.CHAR);
cstmt.registerOutParameter(7, Types.CHAR);

cstmt.setString(1, productId);
cstmt.setString(2, username);
cstmt.setString(3, sourceName);
cstmt.setString(4, sourceId);
cstmt.setBoolean(5, isEUProduct);

cstmt.execute();

除了 isEUProductboolean 之外,java 变量的类型都是 String。每当我运行上面的程序时,我都会收到以下错误:

PLS-00306: wrong number or types of arguments in call to validate_product ORA-06550: line 1, column 7: PL/SQL: Statement ignored"

我一定已经调试了该程序一百次,但一切似乎都是正确的类型并且参数的数量也是正确的。

我完全不知道我做错了什么。在谷歌上搜索后,我怀疑我可能没有正确设置 boolean 参数。

有什么想法吗?

最佳答案

当我们遇到这个问题时我很惊讶,但是 Oracle JDBC 驱动程序不支持将 boolean 值传递到存储过程中......是的,我没有编造它:)

Boolean Parameters in PL/SQL Stored Procedures

The JDBC drivers do not support the passing of BOOLEAN parameters to PL/SQL stored procedures. If a PL/SQL procedure contains BOOLEAN values, you can work around the restriction by wrapping the PL/SQL procedure with a second PL/SQL procedure that accepts the argument as an INT and passes it to the first stored procedure. When the second procedure is called, the server performs the conversion from INT to BOOLEAN.

关于java - 使用带有 boolean IN 参数的 CallableStatement 在 Java 中调用 Oracle PL/SQL 过程会产生 PLS-00306 oracle 错误 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14554251/

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