进度4gl查询db中可用的所有表中的记录的导出计数

时间:2017-10-30 10:32:53

标签: openedge progress-4gl progress-db 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,但在屏幕上显示结果。我出去了。

1 个答案:

答案 0 :(得分: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"也许你的意思是你想知道每个表的记录数量?

要计算表格中的记录数量,您可以使用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.

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

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

这可以在线运行,可能会影响文件io等,所以在非高峰时段第一次运行它只是为了确保。然后查看该文件,您将看到所有表的记录计数,大小等:系统表和用户表。

Proutil在线播放可能不是100%正确但很可能"足够好"。