【问题标题】:Update Oracle timestamp to current date将 Oracle 时间戳更新为当前日期
【发布时间】:2012-10-10 11:27:53
【问题描述】:

我在 Oracle 数据库中有一个 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'

【问题讨论】:

    标签: sql oracle timestamp sql-update


    【解决方案1】:

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

    UPDATE your_table 
       SET your_column = systimestamp
     WHERE ...
    

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

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

    【讨论】:

      【解决方案2】:

      为什么你不这样做

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

      如果您怀疑表上有锁,则需要检查一些表:dba_locksv$sessionv$session_blockers 等。当用户使用不带 @ 的意外 update 阻止某些内容时,这些非常有用987654326@ 或 rollback,但您应该能够查看是否存在应用程序架构中的阻塞锁。您应该在纸上模拟所有场景。

      【讨论】:

      • 令人惊讶的是,这个命令永远不会返回。最初我认为它与 Sql Developer 的问题。所以我在 sqlplus 命令行中尝试了。它的行为相同。请问有什么线索吗?
      • @sandyr 提交/回滚或杀死所有锁定此表行的会话。
      • 如果where column='Q' 的行数很少,那么@VincentMalgrat 是对的,这些行上有一个锁。如果表很大并且影响的行数很大,你应该等待。 Oracle 必须将数据写入磁盘。这不只是发生。
      • 一个程序轮询表不断寻找要处理的记录。我认为这个程序正在锁定整个表。如果执行行级锁定或表锁定,哪个系统表存储信息?
      • 有一些表:dba_locks、v$session、v$session_blockers等
      猜你喜欢
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-26
      • 2019-09-16
      • 2016-06-07
      • 1970-01-01
      相关资源
      最近更新 更多