progress 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,但在屏幕上显示结果。我以优异成绩胜出。

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

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.

如果连接了多个数据库,则需要使用数据库名称(即database._file)来准备_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%正确,但很可能"足够好"。

最新更新