java - Oracle - 更新记录并在同一查询中返回更新日期

标签 java oracle sql-update jdbctemplate

我将 Java 8 与 Spring 的 JdbcTemplate 和 Oracle 12.1 结合使用,

我想更新记录并获取记录更新的确切时间

jdbcTemplate.update(UPDATE_SQL, null);

目前它返回(int)受影响的行数,但我想要确切的更新日期

我必须发送一个新的请求来获取可能不准确的当前时间吗?

更准确的是保存在列更新日期中,然后执行另一个 SQL

还有其他选项可以在一个查询中获取更新日期吗?

显然,我也不想使用从代码获取日期(如 new Date()),因为服务器时间可能与数据库时间不同

最佳答案

与普通 JDBC 相比,您决定使用 JDBCTemplate 很可能是为了简化代码。

恕我直言,这个特殊问题使简单的 JDBC 解决方案如 other answer 中提出的那样。简单得多,因此我明确建议从 JDBCTemplate 获取数据库连接并以 JDBC 方式进行插入。

我想到的使用 JDBCTemplate 的最简单解决方案是将插入包装在 PROCEDURE 中,并将时间戳作为 OUT 参数返回。

简单示例(根据需要调整时间logik)

create procedure insert_with_return_time (p_str VARCHAR2, p_time OUT DATE) as
BEGIN 
   insert into identity_pk(pad) values(p_str);
   p_time := sysdate;
END;
/

调用是使用SimpleJdbcCall完成的

SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName("insert_with_return_time");
SqlParameterSource params = new MapSqlParameterSource().addValue("p_str", str);
Map<String, Object> out = jdbcCall.execute(params);

Map 包含返回的值,例如[P_TIME:2019-10-19 11:58:10.0]

但我只能重复一遍,在这个特定的用例中,恕我直言,JDBC 是 JDBCTemplate 的救援;)

关于java - Oracle - 更新记录并在同一查询中返回更新日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58396930/

相关文章:

sql - 此处不允许使用虚拟列

sql - 如何使这个 SQL 查询更短?

mysql - 将选择查询转换为更新查询 - 对每组的行进行编号

spring - SimpleJdbcInsert 等价于更新

java - 安卓工作室 : Adding a library outside of the project root

java - 除了拆分之外,还有其他方法从字符串中获取列表吗?

java - org.openqa.selenium.WebDriverException : unknown error: cannot focus element using ChromeDriver Selenium and Java

java - addFirst 方法在自定义 linkedList 中无法正常工作

oracle - SQLite与Oracle-计算日期差异-小时

linux - unixODBC 可以处理的最佳进程数是多少?