2011-07-15 58 views
3

我知道我需要使用此查詢來獲取架構表的列表:從ALL_TABLES 選擇表名,其中所有者=「模式」計數沒有。來自多個表格的記錄; Oracle數據庫

我知道下面的查詢計數記錄在表: 從schema.table中選擇count(*)

該架構中有2400多個表。 我的問題是如何使用一步來統計所有表中的記錄數?

回答

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

NUM_ROWS在收集統計信息時填充。因此,它幾乎總是(a)估計和(b)過時。根據統計數據的收集方式和頻率,這可能是非常不準確的。這可能對提示哪些表可能最大,但除此之外我不會依賴它有所幫助...... –

+0

謝謝大家,它真的有所幫助。由於我只需要知道哪些表已填充,並且最接近的行數就足夠了,所以NUM_ROWS列爲我做了。再次感謝! T. – tibby

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也可以。

Regards,
Rob。

相關問題