1

是否有一种自动方法可以知道哪些行是最新添加到 OpenEdge 表中的?我正在与客户合作并可以访问他们的数据库,但他们没有保存数据的 ID 或时间戳。

我想知道,希望 OpenEdge 是否以某种方式开箱即用。(我怀疑是这样,但检查一下不会有什么坏处)

编辑:我的目标

我的目标是能够只导入特定表的新数据,即增量。如果没有哪些行是新的,我不得不导入所有内容,因为我不知道添加了什么。

4

2 回答 2

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.
于 2014-09-03T06:15:13.557 回答
1

1) 简短的回答是否定的 - 没有“在框中”的方式让您知道添加了哪些记录,或者添加它们的顺序。

判断创建顺序的唯一方法是应用序列或对记录加时间戳。由于您的应用程序两者都没有,因此您不走运。

2)如果您正在寻找不应用架构更改的更改,您可以使用会话或数据库触发器捕获更改以捕获对数据库的更新,并将该活动日志保存在某处。

3)如果您只是在寻找“增量” - 您可以定期备份数据库,然后使用查询将当前数据库与备份数据库进行比较,并以这种方式获取差异。

4) 在客户站点上维护一个数据库,其中包含最后一个表转储的内容。下次您想从客户那里获取增量时,将该表的内容与当前表进行比较,转储差异,然后更新 db 表以匹配当前 db 的表。

5)个人。我会与客户交谈,看看 (a) 他们是否真的需要此功能,(b) 了解他们对向系统添加一些字段和一些代码以获取活动日志的想法。添加一些字段和一些代码来更新它们应该没什么大不了的。

于 2014-09-02T01:15:02.210 回答