2011-07-15 3 views
3

私はスキーマのテーブルのリストを取得するには、このクエリを使用する必要があります知っている: 私は次のクエリは、テーブル内のレコードをカウント知っALL_TABLES所有者は=「スキーマ」カウントナンバー。複数のテーブルからのレコードのオラクルDB

からTABLE_NAMEを選択します。 schema.tableからcount(*)を選択してください

このスキーマには2400以上のテーブルがあります。 私の質問は、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'; 
+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を選択するだけで十分です。

よろしくお願いします。
Rob。

関連する問題