查询上次修改时间而没有最后修改的列

时间:2013-07-23 11:43:18

标签: sql database oracle oracle10g

我正在使用Oracle 10g XE。我有一个数据库查询 -

SELECT PID FROM PROUCT WHERE last_modified > '${dih.last_index_time}'

我在这里要做的是比较时间戳。问题是我的表没有last_modified列,我也无法将其添加到表中。但是有一个查询 -

SELECT SCN_TO_TIMESTAMP( ORA_ROWSCN ) FROM PRODUCT; 

这将返回一个包含所需时间戳的列。

如何使用此查询代替last-modified列进行必要的比较?

1 个答案:

答案 0 :(得分:2)

您只需将其放在WHERE子句中:

SELECT PID 
  FROM PRODUCT 
 WHERE SCN_TO_TIMESTAMP( ORA_ROWSCN ) > '${dih.last_index_time}'

,您的两个查询不相同。从ORA_ROWSCN文档(我的重点):

  

对于每一行,ORA_ROWSCN将最近更改的保守上限系统更改编号(SCN)返回到当前会话中的行。当最后一次更新行时,此伪列对于确定近似非常有用。 这不是绝对精确,因为Oracle通过为行所在的块提交的事务来跟踪SCN。

这意味着如果修改块中的一行,则整个块(多行)将具有相同的SCN。

如果您希望查询准确无误,则需要添加LAST_MODIFIED列,或者可能启用row-level dependency tracking。这仍然不准确:

  

...表中的每一行都有一个系统更改号(SCN),表示大于或等于修改行的最后一个事务的提交时间