Прогресс 4gl запрос на экспорт количества записей во всей таблице, доступной в БД

Я пытаюсь экспортировать количество всех таблиц в Excel или текстовом файле.

if any program or any query will help me ? 

Я пытаюсь написать код для экспорта данных, доступных в каждой таблице.

код:

  define stream table t1.
    output stream t1 to t1.csv.

    &scope-define display-fields count(*)

    select count(*) from emp.

    export starem t1 delimiter ",".

Этот код создает Excel с пустым значением, но отображает результат на экране. я в Excel.

1 ответ

Решение

Не уверены, что вы хотите сделать. Примерно так, если вы хотите посчитать количество таблиц в базе данных:

DEFINE VARIABLE icount AS INTEGER NO-UNDO.
FOR each _file NO-LOCK WHERE _file._owner = "PUB":

    /* Skip "hidden" virtual system tables */
    IF _file._file-name BEGINS "_" THEN NEXT.

    iCount = iCount + 1.
END.

MESSAGE iCount "tables in the database"
    VIEW-AS ALERT-BOX INFORMATION.

Если у вас есть несколько подключенных БД, вам нужно добавить _fileтаблица с именем базы данных, т.е. database._file,

Однако: поскольку вы говорите "экспортировать в Excel", возможно, вы имеете в виду, что хотите знать количество записей для каждой таблицы?

Для подсчета количества записей в таблице вы можете использовать FOR или же SELECT,

SELECT COUNT(*) FROM tablename.

или же

DEFINE VARIABLE iCount AS INTEGER NO-UNDO.  
FOR EACH tablename NO-LOCK TABLE-SCAN:
    iCount = iCount + 1.
END.
DISPLAY iCount.

Если вы не хотите кодировать это для каждой таблицы, вам нужно объединить ее с динамическим запросом, учитывающим все записи.

DEFINE VARIABLE hQuery  AS HANDLE    NO-UNDO.
DEFINE VARIABLE hBuffer AS HANDLE    NO-UNDO.
DEFINE VARIABLE iCount  AS INTEGER   NO-UNDO.
DEFINE VARIABLE cTable  AS CHARACTER NO-UNDO.

/* Insert tablename here */
cTable = "TableName".

CREATE QUERY hQuery.
CREATE BUFFER hBuffer FOR TABLE cTable.

hQuery:SET-BUFFERS(hBuffer).

hQuery:QUERY-PREPARE(SUBSTITUTE("FOR EACH &1", cTable)).

hQuery:QUERY-OPEN.

queryLoop:
REPEAT:

    hQuery:GET-NEXT().

    IF hQUery:QUERY-OFF-END THEN LEAVE queryLoop.

    iCount = iCount + 1.
END.

DELETE OBJECT hQuery.
DELETE OBJECT hBuffer.

MESSAGE iCount "records in the table".

Объедините эти два, и у вас есть решение. Однако он может быть медленным, так как он будет считать все записи всех таблиц.

Быстрый и грязный способ - вместо этого запустить "tabanalys" в базе данных, если у вас есть доступ к ней через приглашение:

proutil DatabaseName -C tabanalys > tabanalys.txt

Это может быть запущено в режиме онлайн и может повлиять на работу файлов и т. Д., Поэтому запускайте его в первый час в непиковые часы, просто чтобы убедиться. Затем просмотрите этот файл, вы увидите количество записей, размеры и т. Д. Для всех таблиц: системных таблиц, а также пользовательских таблиц.

Proutil, запущенный онлайн, может быть не на 100% правильным, но, скорее всего, "достаточно хорошим".

Другие вопросы по тегам