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

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

我的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;  
但当我使用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)