算不了。来自多个表的记录; Oracle DB

时间:2011-07-15 06:28:23

标签: database oracle

我知道我需要使用此查询来获取模式的表列表: 从all_tables中选择table_name,其中owner ='schema'

我知道以下查询计算表中的记录: 从schema.table

中选择count(*)

该架构中有2400多个表。 我的问题是如何使用一步计算所有表中的记录数?

2 个答案:

答案 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';