gpt4 book ai didi

java.sql.SQLException : Invalid argument(s) in call: Use setNull for user-defined types and REF types

转载 作者:太空宇宙 更新时间:2023-11-04 09:51:37 25 4
gpt4 key购买 nike

我正在尝试使用 Java 调用存储过程。

我已经查看了类似的错误,并已尝试复制解决方案,但仍然有错误。

java.sql.SQLException:调用中的参数无效:对用户定义类型和 REF 类型使用 setNull(int parameterIndex, int sqlType, String typeName)

import java.sql*;

public class FusionDBConnection {

public static void main(String args[]) {
System.out.println("RUN PROCESS START");

try {

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection dbConn = DriverManager.getConnection("jdbc:oracle:thin:@10.XX.XXX.XXX:1521:AAA1", "TEST", "TESTPASS");

CallableStatement cst = dbConn.prepareCall("{call EDGF.FMW_SELECT_PACS_SEQ(?,?,?,?)}");

cst.setString(1,"A");
cst.setString(2, "B");
cst.setString(3,"C");
cst.setNull(4, java.sql.Types.REF);
cst.registerOutParameter(4,Types.REF);

ResultSet outData = (ResultSet)cst.getObject(4);

while (outData.next()) {
System.out.println(outData.getString(4));
}
dbConn.close();
System.out.println("RUN PROCESS END");
} catch (Exception e) {
e.printStackTrace();
}

}
}

存储过程

create or replace 
PROCEDURE FMW_SELECT_PACS_SEQ
(
IN_RECORDTYPE IN VARCHAR2
, IN_CODE IN VARCHAR2
, IN_GENERATIONNUMBER IN VARCHAR2
, PACSSEQRESULTS OUT SYS_REFCURSOR
) AS
SELECTPACSSEQ VARCHAR2(10000);
BEGIN
--SELECT PACS_SEQ
SELECTPACSSEQ :=

'SELECT RECORD_TYPE, CODE, GENERATION_NUMBER, STATUS, LAST_UPDATED_BY, LAST_UPDATE_DATE FROM EDGF.EDGF_PACS_SEQUENCES
WHERE RECORD_TYPE ='''||IN_RECORDTYPE||''' AND CODE = '''||IN_CODE||'''AND GENERATION_NUMBER ='''||IN_GENERATIONNUMBER||'''';
OPEN PACSSEQRESULTS FOR SELECTPACSSEQ;

END FMW_SELECT_PACS_SEQ;

最佳答案

根据我所读到的内容,您不应该在 OUT 参数上调用 setter,因为它不是设计来从外部接收任何输入值的。因此,删除这一行:

cst.setNull(4, java.sql.Types.REF);

此外,您应该将第四个 OUT 参数注册为 Oracle 游标,因此请使用:

cst.registerOutParameter(4, OracleTypes.CURSOR);

因此,您更新后的配置代码可能如下所示:

cst.setString(1,"A");
cst.setString(2, "B");
cst.setString(3,"C");
cst.registerOutParameter(4, OracleTypes.CURSOR);

如果您还没有 OracleTypes 所需的依赖项,则 visit here并下载 ojdbc Oracle JAR。根据您的 Oracle 版本,您可能需要略有不同的链接(以上链接适用于 12c)。

关于java.sql.SQLException : Invalid argument(s) in call: Use setNull for user-defined types and REF types,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54664009/

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