gpt4 book ai didi

java - "SQLException: Missing IN or OUT parameter"尽管已明确注册

转载 作者:行者123 更新时间:2023-11-30 06:47:44 29 4
gpt4 key购买 nike

我有一个 Spring Boot 应用程序,使用 JPA 和自定义实现来调用存储过程。问题是,在执行调用时,我收到“Missing IN or OUT parameter at index::7”。

实现如下所示:

public class DbLogImpl implements DbLogCustom {
@PersistenceContext
private EntityManager em;

@Override
public Long callInsertLog(Long firstId, Long secondId, Long process, Long subProcess, Long logLevelId, String message, String stacktrace) {

Long logId = null;

StoredProcedureQuery proc = em.createStoredProcedureQuery("logging_pk.insert_log");
proc.registerStoredProcedureParameter(0, Long.class, IN);
proc.registerStoredProcedureParameter(1, Long.class, IN);
proc.registerStoredProcedureParameter(2, Long.class, IN);
proc.registerStoredProcedureParameter(3, Long.class, IN);
proc.registerStoredProcedureParameter(4, Long.class, IN);
proc.registerStoredProcedureParameter(5, String.class, IN);
proc.registerStoredProcedureParameter(6, String.class, IN);
proc.setParameter(0, firstId);
proc.setParameter(1, secondId);
proc.setParameter(2, process);
proc.setParameter(3, subProcess);
proc.setParameter(4, logLevelId);
proc.setParameter(5, message);
proc.setParameter(6, stacktrace);
proc.registerStoredProcedureParameter(7, Long.class, OUT);
proc.execute();

logId = (Long) proc.getOutputParameterValue(7);

return logId;
}
}

我的包看起来像这样:

CREATE OR REPLACE PACKAGE logging_pk AS

PROCEDURE insert_log (
i_first_id NUMERIC,
i_second_id NUMERIC,
i_process NUMERIC,
i_sub_process NUMERIC,
i_log_level_id NUMERIC,
i_message VARCHAR2,
i_stacktrace VARCHAR2,
o_log_id OUT NUMERIC
);

END;

如果这是我唯一的程序,我很可能会承认失败并尝试其他方法。(我已经设法让它与 native 查询一起使用,但没有实际获取输出参数值。)

但是,我有另一个存储过程调用,其设置与此完全相同,并且工作正常。唯一的区别是参数的名称和数量(工作参数有 3 个输入和 1 个输出,输出也是最后一个)。

我无法理解为什么一个工作正常,而另一个则不然。

编辑:由于我在发布这个问题之前就发现了问题,所以我决定省略很多与问题无关的代码,但我将把它留在这里供其他人查找。

最佳答案

在写这个问题的时候我突然有了一个想法。

事实证明,解决方案相当简单。

显然,将 String 参数设置为 null 是不被接受的。通过引入 null 检查并将 null 字符串(本例中为 stacktrace 参数)设置为空字符串解决了问题。

将其留在这里以防其他人遇到此问题。

关于java - "SQLException: Missing IN or OUT parameter"尽管已明确注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43380591/

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