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