8

我在 Oracle 数据库中有一个 TIMESTAMP(6) 字段。该字段的值是格式

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

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

[指向类似问题的链接:]在 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'
4

2 回答 2

21

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

UPDATE your_table 
   SET your_column = systimestamp
 WHERE ...

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

  1. 您正在更新的行被另一个会话锁定(对这些行执行 SELECT FOR UPDATE NOWAIT 将确保拥有锁定)。
  2. 您有执行额外工作的触发器,
  3. 您正在更新由非索引外键引用的列。
于 2012-10-10T11:33:48.310 回答
3

为什么你不只是

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

如果您怀疑表上有锁,则需要检查一些表:dba_locks,等。当用户在没有or的情况下意外阻塞了某些东西时v$sessionv$session_blockers这些很有用,但是您应该能够查看是否存在阻塞锁来自您的应用程序的架构。您应该在纸上模拟所有场景。updatecommitrollback

于 2012-10-10T11:34:41.290 回答