【发布时间】:2011-10-05 21:59:32
【问题描述】:
我知道我需要使用此查询来获取架构的表列表: select table_name from all_tables where owner='schema'
我知道以下查询对表中的记录进行计数: 从 schema.table 中选择 count(*)
该架构中有 2400 多个表。 我的问题是如何一步计算所有表的记录数?
【问题讨论】:
我知道我需要使用此查询来获取架构的表列表: select table_name from all_tables where owner='schema'
我知道以下查询对表中的记录进行计数: 从 schema.table 中选择 count(*)
该架构中有 2400 多个表。 我的问题是如何一步计算所有表的记录数?
【问题讨论】:
您可以使用 DBMS_XMLGEN.GETXMLTYPE 函数一次性完成:
SQL> select table_name
2 , to_number
3 ( extractvalue
4 ( dbms_xmlgen.getxmltype('select count(*) c from ' || table_name)
5 , '/ROWSET/ROW/C'
6 )
7 ) cnt
8 from user_tables
9 order by table_name
10 /
TABLE_NAME CNT
------------------------------ ----------
... [output removed] ...
71 rows selected.
但如果您的架构包含大量数据,这可能需要很长时间。如果估计也可以,只需选择 NUM_ROWS 就足够了。
问候,
抢。
【讨论】:
表ALL_TABLES 包含列NUM_ROWS。 (可以通过如下SQL语句获取表的描述:DESCRIBE ALL_TABLES;)
以下语句显示每个表的记录数:
SELECT TABLE_NAME, NUM_ROWS FROM ALL_TABLES WHERE OWNER='SCHEMA';
要获取架构的所有表中的记录数,请使用:
SELECT SUM(NUM_ROWS) FROM ALL_TABLES WHERE OWNER='SCHEMA';
【讨论】: