【发布时间】:2010-04-15 08:36:25
【问题描述】:
我用这样的签名调用存储函数:
FUNCTION ADDDAYS(城市 VARCHAR2, startDate DATE, numDays INTEGER)
来自java代码:
JdbcTemplate jt = getJdbcTemplate();
Object o = jt.execute("{? = call ADDDAYS(?, ?, ?)}", new CallableStatementCallback() {
public Object doInCallableStatement(CallableStatement stmt) throws SQLException, DataAccessException {
stmt.registerOutParameter(1, Types.DATE);
stmt.setString(2, city);
stmt.setDate(3, new java.sql.Date(startDate.getTime()));
stmt.setInt(4, daysNum);
stmt.execute();
return new Date(stmt.getDate(1).getTime());
}
});
当我传递 startDate 时,时间返回值包含 00:00 作为时间(存储过程不削减时间部分,我通过 sql 编辑器的直接调用对其进行了检查)。 所以看起来时间部分在发送到/接收表单 Oracle 中被删除了。 有可能修复它吗? 谢谢。
【问题讨论】:
-
我希望你意识到
ADDDAYS函数正在重新发明轮子;将一个数字添加到 OracleDATE或TIMESTAMP会添加该天数(或其分数)。 -
它不仅仅是在指定日期上添加 N 天,它使用不同城市的工作日日历。如果我只需要在当前日期加上 N 天,为什么还要将 city 参数传递给这个函数。
标签: java oracle stored-procedures plsql