如何确定 Progress OpenEdge ABL 字段的最大长度

How to determine the largest length of Progress OpenEdge ABL fields

在 OpenEdge ABL / Progress 4GL 中,可以使用 FORMAT 定义字段,但这只是显示字段的默认格式。因此,具有 FORMAT 'X(10)' 的 CHARACTER 字段可以存储超过前十个字符的数千个字符。

我正在使用的数据库在一些我关心的 table 中包含数百万行。 是否有任何系统 table 或 Progress 内部程序可用于确定给定字段的最长长度? 我正在寻找比 full-table 扫描。我正在使用 Progress OpenEdge 11.5。

"dbtool" 将扫描数据库并查找宽度超过 "sql width" 的字段。默认情况下,这是为字符字段定义的格式的 2 倍。

https://knowledgebase.progress.com/articles/Article/P24496/

当然它必须扫描 table 才能做到这一点,因此它可能不符合您的 "more efficient than table scans" 标准。 FWIW dbtool 相当高效。

如果您担心的字段由于潜在的 SQL 访问而存在问题,您可能还想通过 -SQLTruncateTooLarge 参数查看 "authorized data truncation",这将截断即时数据。

另一个选项是 -SQLWidthUpdate,它会动态自动调整 SQL 宽度。这需要至少升级到 11.6。

无需定期 table 扫描,这两种方法都可以解决您的问题。

如果实际上是你要调整的字符格式来匹配数据,我想你可以做的是使用dbtool调整所有字段的SQL宽度,然后设置字符格式是 SQL 宽度的一半。