gpt4 book ai didi

java - Spring JDBC 模板 - Oracle DB 函数返回 null

转载 作者:行者123 更新时间:2023-11-30 02:13:10 26 4
gpt4 key购买 nike

我的 Oracle DB 存储函数如下:

CREATE OR REPLACE FUNCTION FN_EMP_CNT (EMP_ID NUMBER) RETURN NUMBER
IS
OLD_COUNT NUMBER(5) DEFAULT 0;
NEW_COUNT NUMBER(5) DEFAULT 0;
BEGIN

SELECT
COUNT(EMP_ID) INTO OLD_COUNT
FROM
OLD_DEPT
WHERE
EID = EMP_ID
AND DEPT_STAT='Closed';
SELECT
COUNT(EMP_ID) INTO NEW_COUNT
FROM
NEW_DEPT
WHERE
EID = EMP_ID
AND DEPT_STAT='Closed'
RETURN (NEW_COUNT + OLD_COUNT);
END;

当我直接使用下面的 sql 查询时,它返回正确的数字 2:

SELECT FN_EMP_CNT(123) FROM DUAL;  

但是当我使用 Spring JDBC Template 检索数据时,它返回 null

int noOfEmps = jdbcTemplate.queryForObject("SELECT FN_EMP_CNT(?) FROM DUAL", new Object[] { empID}, Integer.class);  

最佳答案

最可能的原因是您使用了错误的参数顺序,请参阅 Javadoc queryForObject

queryForObject(java.lang.String sql, java.lang.Class<T> requiredType, java.lang.Object... args)
Query given SQL to create a prepared statement from SQL and a list of
arguments to bind to the query, expecting a result object.

因此,首先使用所需的返回类型,然后使用参数

这对我有用

sql = 'SELECT FN_EMP_CNT(?) FROM DUAL'
res = jdbcTemplate.queryForObject(sql, Integer.class, 4)

HTH

关于java - Spring JDBC 模板 - Oracle DB 函数返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49496147/

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