繁体   English   中英

Spring JDBC模板-Oracle DB Function返回null

[英]Spring JDBC Template - Oracle DB Function returns null

我的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模板检索数据时,它返回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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM