Java Spring JDBC模板-Oracle DB函数返回null
我的Oracle DB存储函数如下所示:Java Spring JDBC模板-Oracle DB函数返回null,java,spring,oracle,spring-jdbc,Java,Spring,Oracle,Spring Jdbc,我的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_I
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;
但当我使用SpringJDBC模板检索数据时,它返回null
int noOfEmps = jdbcTemplate.queryForObject("SELECT FN_EMP_CNT(?) FROM DUAL", new Object[] { empID}, Integer.class);
最可能的原因是使用了错误的参数顺序,请参见Javadoc
HTH您认为程序与函数处于同一模式吗?是的,它们指的是同一模式。我不是这方面的专家,但在sql语句中没有任何绑定变量的情况下,为什么要传递args数组?您是否尝试过
queryForObject(“从DUAL中选择FN\u EMP\u CNT(123)”,Integer.class)
?为了进一步排除故障,我建议将函数更改为只返回2代码>并查看是否有效。或者尝试将查询更改为“SELECT?FROM DUAL”,以确保绑定变量有效。@kfinity问题不在SQL中,而在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)