如何获取数据库中更改的数据?

时间:2015-12-24 12:53:16

标签: sql database oracle

我需要从表A中获取本地名称,这些名称在过去30天内使用SQL进行了更改。 我是否需要创建表的备份或是否有其他方法? 如果创建备份是唯一的方法,我们如何比较和找出本地覆盖的名称?

表格详情

=iif(Parameters!daterange.Value = 10000, "As of: " & First(Fields!mindate.Value, "TopExecutedReports"), "")

我需要在每个月末生成一个Feed来获取已更改的TREE_ID (NUMBER) TREE_NM (VARCHAR2) TREE_LEVEL (VARCHAR2) UPLEVEL_ID (NUMBER) HRCHY_TYPE (VARCHAR2) CATG_ID (NUMBER) SUBCATG_ID (NUMBER) STATUS (VARCHAR2) USER_ID (NUMBER) CREATE_DATE (DATE) EFFCT_START_DATE (DATE) EFFCT_END_DATE (DATE) UPDATED_DATE (DATE) TOP_LEVEL_ID (NUMBER)

2 个答案:

答案 0 :(得分:2)

我认为Oracle中没有默认操作可以做到这一点。可能的解决方法可能是在您存储modificationDate的表A中包含一个新列。然后定义Before Insert OR Update Trigger,它只是将新值(当前日期)写入已插入或更新的所有行。

希望这有帮助。

答案 1 :(得分:2)

如果您无法修改表格,除非您可以修改修改表格的应用程序,否则无法执行此操作。如果您可以执行后者,请使用以下内容创建第二个表:

TreeID NUMBER (foreign key)
LastModifiedDate datetime

每次修改第一个表时写入此表。然后,您可以在

上将两个表连接在一起
TableA.TreeID = Table2.TreeID
WHERE Table2.LastModifiedDate >= DATEADD(d, -30, getdate())

这将返回过去30天内修改过的所有记录。

如果您无法修改数据库或应用程序,那么使用您当前的结构是不可能的,所以希望您能够进行一些更改。

修改

如果您将来需要跟踪其他目的的历史更改,您应该考虑实施数据仓库(具体来说,查看缓慢变化的维度)。

第二次修改:

我会严肃地质疑为什么你不允许在这个表中添加一个字段。在SQL Server中,您可以向表中添加字段,而不会影响访问它的数据或应用程序。如果我是你,我会非常努力地将该字段添加到表中,而不是创建一个更复杂和模糊的数据库/应用程序结构,没有明显的原因。