如何查询 hsqldb 2.5.1 的系统版本控制



我打开一个新问题,因为我找不到解决方案。

我想使用 Hsqldb 2.5.1 的系统版本控制,以便能够在后台任务中复制在由两个时间戳(时间开始和时间停止(定义的时间间隔内发生的表(插入、删除或更新(上的任何更改。

假设这是可能的,那么用于查找在时间间隔(时间开始,时间停止(期间分别通过插入,更新和删除更改的记录的三个查询是什么。

谢谢你的帮助。

经过大量研究,我发现了 3 个似乎可以回答我问题的查询。 欢迎任何更正,SQL不是我最了解的...

复制间隔由 2 个没有时区的时间戳定义,因为我使用的驱动程序是由 UNO API(OpenOffice/LibreOffice(提供的驱动程序,而 getter/setter (getTimestamp/setTimestamp( 不分别管理timestarttimestop

的时区时间戳。rowstart:是声明为 时间戳的列,始终生成为行开始。

rowend:是声明为 时间戳生成的列始终作为行结束。

customerid:是客户表的主键。

要查找已更新的记录,请执行以下操作:

SELECT current.customerid FROM customer FOR SYSTEM_TIME AS OF timestop + SESSION_TIMEZONE() AS current
INNER JOIN customer FOR SYSTEM_TIME FROM timestart + SESSION_TIMEZONE() TO timestop + SESSION_TIMEZONE() AS previous
ON current.customerid = previous.customerid AND current.rowstart = previous.rowend;

查找已插入的记录:

SELECT current.customerid FROM customer FOR SYSTEM_TIME AS OF timestop + SESSION_TIMEZONE() current
LEFT JOIN customer FOR SYSTEM_TIME AS OF timestart + SESSION_TIMEZONE() previous
ON current.customerid = previous.customerid WHERE previous.customerid IS NULL;

要查找已删除的记录,请执行以下操作:

SELECT previous.customerid FROM customer FOR SYSTEM_TIME AS OF timestart + SESSION_TIMEZONE() previous
LEFT JOIN customer FOR SYSTEM_TIME AS OF timestop + SESSION_TIMEZONE() current
ON previous.customerid = current.customerid WHERE current.customerid IS NULL;

我不知道使用DATABASE_TIMEZONE而不是SESSION_TIMEZONE是否会更明智,对想要确认的人自由......

我没有时间进行大规模测试,但即使有很多记录,它也能很快工作。

瞧...

编辑:我刚刚注意到使用hsqldb 2.5.1版本很重要,因为我没有设法在2.5.0下进行正确的操作...

最新更新