Прогресс 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% правильным, но, скорее всего, "достаточно хорошим".