progress 4gl 查询数据库中所有 table 可用记录的导出计数

progress 4gl query for export count of records in all table available in db

我正在尝试导出 excel 或文本文件中所有 table 的计数。

if any program or any query will help me ? 

我正在尝试针对每个 table 中可用数据的导出计数进行编码。

代码:

  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。

不确定你想做什么。如果你想计算数据库中 table 的数量,可以这样:

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-table 前加上数据库名称,即 database._file.

但是:既然你说 "export to excel" 也许你的意思是你想知道每个 table?

的记录数

要计算 table 中的记录数,您可以使用 FORSELECT

SELECT COUNT(*) FROM tablename.

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

如果您不想为每个 table 编写代码,您需要将它与计算所有记录的动态查询相结合。

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".

将这两者结合起来,您就有了解决方案。但是它可能会很慢,因为它将计算所有 tables.

的所有记录

一种快速而肮脏的方法是在数据库上 运行 "tabanalys" 如果您可以通过提示访问它:

proutil DatabaseName -C tabanalys > tabanalys.txt

这可能 运行 在线并且可能对文件 io 等有影响,所以 运行 第一次在非高峰时间进行以确保。然后查看该文件,您将看到所有 tables 的记录数、大小等:system-tables 以及 user-tables.

Proutil 运行 在线可能不是 100% 正确,但很可能 "good enough"。