有一个数据库,里面有表,如果有什么东西被写入到表中或者被删除了,那么这些更改就会被写入到表中TableChangeHistory。我的应用程序需要根据请求知道哪些表已更改并从更新的表中选择数据。表本身如下所示:
CREATE TABLE TABLECHANGEHISTORY
(
TABLENAME VARCHAR2(512 CHAR),
MODIFIEDDATE DATE,
OBJIDS VARCHAR2(4000 CHAR)
);
CREATE INDEX I_TCHIST_TNMODIFIED ON TABLECHANGEHISTORY (TABLENAME, MODIFIEDDATE);
在我的应用程序中,我提出这样的请求:
select to_char(max(modifieddate),'DD.MM.YYYY HH24:MI:SS') as lastmodifieddate,tablename
from TableChangeHistory
group by tablename;
结果,我得到了一组数据,其中我看到了哪些表已更改。我想过以某种方式玩时间,例如,查看今天、一个小时等的变化,但后来我丢失了在我向程序发出请求之前可能已经更改的数据并且没有落入时间段,所以我使用最大值。这里我有一个问题,如何记住这个查询已经存在的结果。例如,我第一次启动程序,我的查询给了我所有更改的表,我从这些表中卸载,然后我必须以某种方式从查询中保存这些数据,哪些表已更改(在我的情况下,在查询的输出,我得到一个数组),例如,如果 20 分钟后我再次按下按钮,请求会给我另一批更改的表,
如何跟踪和比较什么是旧的和什么是新的?
如果不更改数据库,它将无法工作。
TableChangeHistory最简单的方法是通过添加一个带有已查看更改标记的字段来修改已经存在的表:然后可以将请求限制为仅那些尚未“看到”的更改:
处理请求后,应注意查看的记录:
@Vladimr Vladimirovoch。为了能够查看更改的动态,您需要为需要此类信息的每个表制作日志记录表。那些。一个触发器挂在表上,当每条记录被插入/更改/删除时,它将每个更改写入另一个表(一条记录插入到日志中),并带有时间戳。日志会定期清除。
方案(不关心语法)。
创建表
我们创建一个触发器来修复工作表更改的事实(或者更确切地说,接收更改历史表中此类更改的记录)
当需要获取有关已更改表的信息(或者更确切地说,只是此类表的列表)时,我们执行
像这样的地方...
PS。如果多个模式/基础的表中的更改是固定的,则在 tablename 字段中我们写表的全名,指示模式/数据库。