插入行时,我想设置一个列,等于提交时的当前时间。
如果我在列上使用默认值sysdate
,它将使用插入时的当前时间(这可能与提交时间明显不同)。如果我使用on insert触发器,它会再次使用插入时的时间 - 而不是实际提交。
是否有任何可能的解决方案可以使用oracle获取当前时间?
答案 0 :(得分:2)
有选择。不过,他们可能比你希望的更重量级。
您可以创建一个快速刷新的物化视图,该视图在提交时刷新,并在该行提交时触发的物化视图上设置触发器。但是,这意味着您需要在基表上使用物化视图日志,这样您的插入会产生写入表的开销,而日志加上您需要承担物化视图刷新的成本当你犯了。如果您必须完全刷新物化视图,则还需要确保关闭触发器。这些动作很多,会增加系统的复杂性。
根据Oracle版本的不同,您可以启用闪回数据存档(也称为Total Recall),它将记录每个版本的数据提交时间的SCN和时间戳。缺点是你有一个潜在的大型历史表,可能会跟踪一堆你不关心的信息。