当前位置: 首页 > 面试题库 >

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

罗韬
2023-03-14
问题内容

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

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

jdbcTemplate.update(UPDATE_SQL, null);

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

我是否必须发送新请求以获取可能不正确的当前时间?

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

是否有另一个选项可在一个查询中获取更新日期?

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


问题答案:

纯JDBC 相比,您决定使用JDBCTemplate最有可能简化代码。

IMHO的这个特殊问题使其他答案中提出的 普通JDBC
解决方案更加简单,因此,我绝对建议从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]

但我只能重复一遍,在这个特殊的用例中,IMHO JDBC是从JDBCTemplate中抢救过来的 ;)



 类似资料:
  • 问题内容: 我的数据库中有两个表,如下表所示。在每个表DETEM_MENT_CODE的第一个ITEM表中,将有多个ITEM_CODE。 在表COMPETITOR evey ITEMCODE中将有三个条目,并且具有不同的competitor_Code 我有三个值Comp_1,comp_2,comp_3和department_code = 14; 我想做的是用comp_1,comp_2,comp_3更

  • 查找特定记录并更新

  • 更新记录 V2.0.0 加入寄存器运行模式,可大幅提升热更内数值计算性能 执行性能整体提升,传统非寄存器模式执行效率也得到一定幅度提升 修正热更内finnaly块在一些情况下不正确的bug,连带修复了yield return和async/await的一些异常情况 修正值对类型绑定后的数组进行操作时的异常 修正热更内Enum一些情况下Equals结果错误的bug 修正跨域继承接口时的一些异常情况 修

  •  版本更新记录 2016.09.10 1) 底层组件-新增时间处理集合 2016.09.5 1) 底层组件-优化防刷 2) 底层组件-错误监控 2) 底层组件-优化通过类名绑定相关事件 2016.08.25 1) 底层组件-新增百度统计组件 2016.08.11 1) 底层组件-优化udb定制登录,增加QQ登录 2) 活动组件-新增完成任务组件 2016.08.9 1) 活动组件-新增防刷组件

  • 问题内容: 我发现了具有正确答案的类似问题。但是它们对我来说有点复杂。我只想要一个简单的基本声明。 我有: …和: 如何合并它们? 问题答案: 有关OUTPUT子句的更多信息,请查看此文章。

  • 问题内容: 我有以下查询,仅在它们为空时才在其中更新值。 是否可以将所有这些都放入单个查询中? 和 问题答案: 您可以尝试: 尽管它可能会触发更新触发器,即使对于实际上未更改的行也是如此。