我知道我需要使用此查询来获取模式的表列表: 从all_tables中选择table_name,其中owner ='schema'
我知道以下查询计算表中的记录: 从schema.table
中选择count(*)该架构中有2400多个表。 我的问题是如何使用一步计算所有表中的记录数?
答案 0 :(得分:2)
您可以使用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即可。
的问候,
罗布。
答案 1 :(得分:1)
表格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';