我正在尝试导出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",也许你的意思是想知道每个表的记录数?
要计算表中的记录数,可以使用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
这可以在线运行,可能会对文件io等产生影响,所以第一次在非高峰时间运行它只是为了确保安全。然后查看该文件,您将看到所有表的记录计数、大小等:系统表和用户表。
Proutil在网上运行可能不是100%正确,但很可能"足够好"。