我需要从表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)
。
答案 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中,您可以向表中添加字段,而不会影响访问它的数据或应用程序。如果我是你,我会非常努力地将该字段添加到表中,而不是创建一个更复杂和模糊的数据库/应用程序结构,没有明显的原因。