【问题标题】:Counting no. of records from multiple tables; Oracle DB数着没有。来自多个表的记录;甲骨文数据库
【发布时间】:2011-10-05 21:59:32
【问题描述】:

我知道我需要使用此查询来获取架构的表列表: select table_name from all_tables where owner='schema'

我知道以下查询对表中的记录进行计数: 从 schema.table 中选择 count(*)

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

【问题讨论】:

    标签: database oracle


    【解决方案1】:

    您可以使用 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 就足够了。

    问候,
    抢。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • NUM_ROWS 在收集统计信息时填充。因此,它几乎总是 (a) 一个估计值和 (b) 过时的。根据收集统计数据的方式和频率,它可能非常不准确。它可能有助于快速提示哪些表可能最大,但除此之外我不会依赖它......
      • 谢谢大家,真的很有帮助。由于我只需要知道填充了哪些表并且接近的行数就足够了,因此 NUM_ROWS 列为我做了。再次感谢! T.
      猜你喜欢
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 2020-05-21
      • 2023-03-22
      • 1970-01-01
      • 2018-05-01
      相关资源
      最近更新 更多