Как определить наибольшую длину полей Progress OpenEdge ABL

В OpenEdge ABL / Progress 4GL поле можно определить с помощью ФОРМАТА, но это только формат по умолчанию для его отображения. Таким образом, поле CHARACTER с FORMAT 'X (10)' может хранить тысячи символов после первых десяти.

База данных, которую я использую, содержит миллионы строк в некоторых таблицах, которые меня интересуют. Есть ли какая-нибудь системная таблица или внутренняя программа Progress, которую я могу использовать для определения максимальной длины данного поля? Я ищу что-нибудь более эффективное, чем сканирование всей таблицы. Я использую Progress OpenEdge 11.5.


person zr00    schedule 24.09.2018    source источник
comment
Я не уверен, в чем преимущество «исправления» форматов, если только, как предполагает Том, это не проблема ширины SQL. Не могли бы вы немного рассказать о причинах?   -  person jdpjamesp    schedule 25.09.2018
comment
Хороший вызов @jdpjamesp. В рассматриваемой базе данных нет программ, выполняющих запросы SQL. Меня беспокоит ETL из этой базы данных Progress в базу данных Oracle.   -  person zr00    schedule 25.09.2018


Ответы (2)


«dbtool» просканирует базу данных и найдет поля, ширина которых превышает «ширину sql». По умолчанию это вдвое больше формата, определенного для символьных полей.

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

Конечно, для этого он должен сканировать таблицу, поэтому он может не соответствовать вашему критерию «более эффективно, чем сканирование таблицы». FWIW dbtool достаточно эффективен.

Если поля, которые вас беспокоят, являются проблематичными из-за потенциального доступа к SQL, вы также можете захотеть изучить «санкционированное усечение данных» с помощью параметра -SQLTruncateTooLarge, который будет усекать данные на лету.

Другой вариант - -SQLWidthUpdate, который автоматически регулирует ширину SQL на лету. Для этого требуется обновление как минимум до 11.6.

Оба они могут решить вашу проблему без сканирования таблицы Менделеева.

person Tom Bascom    schedule 24.09.2018
comment
Спасибо, Том! В документации говорится, что у него есть различные варианты, включая конкретные RECID и таблицы (опубликовать это, поскольку мне было любопытно). - person zr00; 25.09.2018

Если это действительно формат символов, который вы хотите настроить для соответствия данным, я полагаю, что вы могли бы сделать, это использовать dbtool для настройки ширины SQL всех полей, а затем установить формат символов, равный половине ширины SQL.

person jdpjamesp    schedule 26.09.2018
comment
Не совсем то, что я ищу, но я проголосовал за, так как это хорошая идея для других! Меня интересует не ширина SQL в самой базе данных Progress, а определения полей в базе данных Oracle. - person zr00; 26.09.2018