是否有自动方式知道哪些行是最新添加到OpenEdge表中的?我正在使用客户端并可以访问他们的数据库,但他们没有保存数据的ID和时间戳。
我想知道OpenEdge是否能以某种方式开箱即用。 (我怀疑它是否但检查不会有害)
修改:我的目标
我的目标是只能导入特定表的新数据,即delta。没有哪些行是新的,我被迫导入所有内容,因为我不知道什么是aded。
答案 0 :(得分:1)
1)简短的回答是否 - 没有“盒子里”的方式让你知道添加了哪些记录,或者添加了它们的顺序。
告诉创建顺序的唯一方法是应用序列或通过时间戳记录。由于你的申请都没有,你运气不好。
2)如果您正在寻找未应用架构更改的更改,则可以使用会话或数据库触发器捕获更改以捕获数据库的更新,并将该活动日志保存在某处。
3)如果您只是在寻找“增量” - 您可以定期备份数据库,然后使用查询将当前数据库与备份数据库进行比较并获得差异。
4)使用最后一个表转储的内容在客户站点上维护一个数据库。下次要从客户获取增量时,将该表的内容与当前表进行比较,转储差异,然后更新db表以匹配当前db的表。
5)个人而言。我会与客户交谈并查看(a)他们是否确实需要此功能,(b)了解他们对系统添加一些字段和一些代码以获取活动日志的看法。添加一些字段和一些代码来更新它们不应该那个很重要。
答案 1 :(得分:1)
您可以使用数据库触发器来满足此需求。为此,您需要能够编写和部署触发器过程。您需要记住,4GL和SQL-92引擎无法识别彼此的触发器。因此,如果可以通过SQL进行更新,那么4GL触发器将对这些更新视而不见。反之亦然。 (如果你不使用SQL,这一点都不重要。)
您可能希望使用WRITE触发器来捕获数据的插入和更新。你关心删除吗?
简单的4gl WRITE触发器:
TRIGGER PROCEDURE FOR WRITE OF Customer. /* OLD BUFFER oldCustomer. */ /* OLD BUFFER is optional and not needed in this use case ... */
output to "customer.dat" append.
export customer.
output close.
return.
end.