如何使用具有空值的last_modified日期列更新以前的行?

时间:2014-09-18 10:19:28

标签: sql oracle plsql

我有一个加载程序表,其中feed每三个小时更新并插入一次记录。一些记录显示last_modified日期的Null值,即使我有一个合并,它检查last_modified date列到sysdate。为了将来的目的,我将last_modified设置为sysdate并启用Not NULL约束。有什么方法我们可以单独纠正这些记录集,使last_modified日期具有正确的时间戳(记录应该具有last_modified日期和日期插入/更新完成后。)

由于

2 个答案:

答案 0 :(得分:0)

不,默认情况下,上次修改时间不会存储在一行中。你必须像现在这样做,或者启用某种形式的日记。没有办法纠正你没有这样做的旧记录。

答案 1 :(得分:0)

如果您的行已被“最近”修改,您仍可以使用{{3将ora_rowscn映射到近似修改TIMESTAMP }}:

UPDATE MY_TABLE
    SET Last_Modified = SCN_TO_TIMESTAMP(ora_rowscn)
    WHERE Last_Modified IS NULL;

这不是一个神奇的子弹。引用文档:

  
      
  • 结果值的通常精度为3秒。
  •   
  • 数据库在一段有限的时间内记住SCN与生成SCN时的时间戳之间的关联。如果数据库以自动撤消管理模式运行,则此期间是自动调整的撤消保留期的最大值,以及数据库中所有闪回存档的保留时间,但不少于120小时。只有在数据库打开时,关联才会过时。如果为SCN_TO_TIMESTAMP的参数指定的SCN太旧,则会返回错误。
  •   

如果您尝试在允许的窗口之外映射ora_rowscn行,您将收到错误ORA-08181 “指定的号码不是有效的系统更改号码”。< / p>