在OpenEdge ABL / Progress 4GL中,可以使用FORMAT定义字段,但这只是要显示的默认格式。因此,具有FORMAT'X(10)'的CHARACTER字段可以存储前十个字符之后的数千个字符。
我正在使用的数据库在我关注的某些表中包含数百万行。 是否可以使用任何系统表或Progress-internal程序来确定给定字段的最长长度?我正在寻找比全表扫描更有效的方法。我正在使用OpenEdge 11.5。
答案 0 :(得分:4)
“ dbtool”将扫描数据库并查找宽度超过“ sql width”的字段。默认情况下,它是为字符字段定义的格式的2倍。
https://knowledgebase.progress.com/articles/Article/P24496/
当然,它必须扫描表才能这样做,因此它可能不符合您的“比表扫描更有效”的条件。 FWIW dbtool相当有效。
如果由于潜在的SQL访问而使您关注的字段有问题,您可能还希望通过-SQLTruncateTooLarge参数查看“授权数据截断”,该参数将即时截断数据。
另一个选项是-SQLWidthUpdate,它可以即时自动调整SQL宽度。这要求至少升级到11.6。
这两种方法都可以在不进行定期表扫描的情况下解决您的问题。
答案 1 :(得分:1)
如果实际上是您要调整以匹配数据的字符格式,我想您可以做的是使用dbtool调整所有字段的SQL宽度,然后将字符格式设置为SQL宽度的一半。 。