Как я могу рассчитать общее количество записей, используя Progress 4GL - PullRequest
3 голосов
/ 21 августа 2009

Как подсчитать общее нет. записей в таблице? Я хочу показать все имена таблиц в БД, а также нет. записей в каждой таблице

Ответы [ 4 ]

5 голосов
/ 28 августа 2009

Самый быстрый метод:

proutil dbname -C tabanalys > dbname.tab

это внешняя утилита, которая анализирует БД.

Вы также можете, конечно, читать каждую запись и считать их, но это, как правило, намного медленнее.

5 голосов
/ 21 августа 2009

Способ получения количества записей зависит от планируемого приложения.

Наши администраторы баз данных просто используют утилиты прогресса. В Unix / usr / dlc / bin / proutil -C dbanalys или в другом варианте, чтобы получить информацию о базе данных и просто вывести ее в файл.

Чтобы получить информацию о схеме из самого процесса, вы можете использовать таблицы VST. В частности, в конкретной базе данных вы можете использовать таблицу _file для получения всех имен таблиц.

Когда у вас есть имена таблиц, вы можете использовать запросы, чтобы получить количество записей в таблице. Самый быстрый способ запросить определенную таблицу для подсчета записей - использовать предварительный выбор.

Это потребует использования динамического буфера и запроса.

Так что вы можете сделать что-то вроде следующего.

CREATE WIDGET-POOL.

DEF VAR h_predicate AS CHAR     NO-UNDO.
DEF VAR h_qry       AS HANDLE   NO-UNDO.
DEF VAR h_buffer    AS HANDLE   NO-UNDO.

FOR EACH _file NO-LOCK:

    h_predicate = "PRESELECT EACH " + _file._file-name + " NO-LOCK".

    CREATE BUFFER h_buffer FOR TABLE _file._file-name .
    CREATE QUERY h_qry.
    h_qry:SET-BUFFERS( h_buffer ).
    h_qry:QUERY-PREPARE( h_predicate ).
    h_qry:QUERY-OPEN().

    DISP _file._file-name h_qry:NUM-RESULTS.

    DELETE OBJECT h_qry.
    DELETE OBJECT h_buffer.

END.
1 голос
/ 30 августа 2013

Легко:

Select count(*) from tablename.

Немного сложнее:

Def var i as int.
for each table:
    i = i + 1.
end.
display i.

Для более сложного ответа, вы получили другие.

0 голосов
/ 28 ноября 2013

Используйте функцию CURRENT-RESULT-ROW с DEFINE QUERY и GET LAST, чтобы получить общее количество записей:

, например

DEFINE QUERY qCustomer FOR Customer SCROLLING.
OPEN QUERY qCustomer FOR EACH Customer NO-LOCK.

GET LAST qCustomer.
DISPLAY CURRENT-RESULT-ROW("qCustomer") LABEL "Total number of rows".
...
CLOSE QUERY qCustomer.
...