将Oracle时间戳更新为当前日期

时间:2012-10-10 11:27:54

标签: sql oracle timestamp sql-update

我在Oracle db中有一个TIMESTAMP(6)字段。该字段的值采用格式

DD/MM/YYYY HH:MM:SS.000000000 PM

如何将此值更新为当前时间戳?

[指向类似问题的链接:] update date value in oracle

我遵循了这个链接,但是后续查询需要很长时间才能执行。

update table_name set start_time = to_char(to_date(start_time, 'yyyy/mm/dd-hh:mi:ss:ff3'), '2012/10/10-19:30:00:00') where column='Q'

2 个答案:

答案 0 :(得分:15)

timestamp是一个时间点,它没有格式。要将此类字段更新为当前时间戳,请使用SYSTIMESTAMPCURRENT_TIMESTAMP(分别为服务器的日期/时间和会话的日期/时间):

UPDATE your_table 
   SET your_column = systimestamp
 WHERE ...

如果查询花费了异常的时间(比具有相同WHERE子句的类似SELECT长得多),最可能的原因是:

  1. 您正在更新的行被另一个会话锁定(在这些行上执行SELECT FOR UPDATE NOWAIT将确保拥有锁定。)
  2. 您有执行其他工作的触发器
  3. 您正在更新由非索引外键引用的列。

答案 1 :(得分:3)

为什么你不只是

update table_name 
set start_date = systimestamp 
where column='Q'

如果您怀疑桌面上有锁,则需要检查一些表:dba_locksv$sessionv$session_blockers等。当用户意外阻止某些内容时,这些表非常有用update没有commitrollback,但您应该能够看到是否存在阻止来自应用程序体系结构的锁定。你应该只是在纸上模拟所有场景。