我正在尝试导出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,但在屏幕上显示结果。我出去了。
答案 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"也许你的意思是你想知道每个表的记录数量?
要计算表格中的记录数量,您可以使用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%正确但很可能"足够好"。