我知道我需要使用此查詢來獲取架構表的列表:從ALL_TABLES 選擇表名,其中所有者=「模式」計數沒有。來自多個表格的記錄; Oracle數據庫
我知道下面的查詢計數記錄在表: 從schema.table中選擇count(*)
該架構中有2400多個表。 我的問題是如何使用一步來統計所有表中的記錄數?
我知道我需要使用此查詢來獲取架構表的列表:從ALL_TABLES 選擇表名,其中所有者=「模式」計數沒有。來自多個表格的記錄; Oracle數據庫
我知道下面的查詢計數記錄在表: 從schema.table中選擇count(*)
該架構中有2400多個表。 我的問題是如何使用一步來統計所有表中的記錄數?
表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';
可以使用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。
NUM_ROWS在收集統計信息時填充。因此,它幾乎總是(a)估計和(b)過時。根據統計數據的收集方式和頻率,這可能是非常不準確的。這可能對提示哪些表可能最大,但除此之外我不會依賴它有所幫助...... –
謝謝大家,它真的有所幫助。由於我只需要知道哪些表已填充,並且最接近的行數就足夠了,所以NUM_ROWS列爲我做了。再次感謝! T. – tibby