2017-10-21 11 views
0

テーブルセット(パラメータまたはテーブルのリスト)を提供する下位のフォーマットの多数のテーブル(たとえば40,50テーブル)の数を調べる必要があります。Oracleデータベースから複数の表を取得する方法は?

つまり、私はユーザー定義のテーブルセットのために以下のようにテーブルの数を見つける必要があります。

TABLE_NAME : ROW_COUNT 
table_a : 1000000 
table_b : 200000 
table_c : 450000 
table_d : 80000 

など。

1)SQL開発者やヒキガエルまたはすぐに複数のテーブルの数を取得するための他のツールで作り付けのオプションがありますか?

2.)上記の出力を得ることができるSQL文またはpl/sqlスクリプトはありますか?

注:スキーマ内のすべてのテーブルの数を取得したくないことに注意してください。私はテーブルの特定のリストのみを必要とします。例:スキーマ内に100個のテーブルがあるとしますが、私が言及している25個のテーブルの数だけを必要とします。

答えて

1

PL/SQLこのようなブロックは動作します。テーブル名の定義されたリストのために、動的にALL_TABLESから取り出されたテーブル名から形成されたクエリ文字列を実行するために

DECLARE 
    V_YOUR_SCHEMA VARCHAR2(30) ; 
    V_COUNT NUMBER; 
BEGIN 
    V_YOUR_SCHEMA :='SCHEMA_NAME'; 

    FOR L_TABLE_NAME IN (SELECT TABLE_NAME FROM ALL_TABLES WHERE SCHEMA_NAME = v_YOUR_SCHEMA) 
    LOOP 
     EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || v_YOUR_SCHEMA ||'.' ||L_TABLE_NAME INTO V_COUNT; 
     DBMS_OUTPUT.PUT_LINE(L_TABLE_NAME||' : '||V_COUNT); 
    END LOOP; 
END; 
/
スニペットを EXECUTE IMMEDIATE使用しています。

DECLARE 
    V_YOUR_SCHEMA VARCHAR2(30) ; 
    V_COUNT NUMBER; 
    V_TABLE_LIST DBMS_SQL.VARCHAR2_TABLE; 
    TYPE V_LIST_TYPE is VARRAY(50) of VARCHAR2(30); 
BEGIN 
    V_YOUR_SCHEMA :='SCHEMA_NAME'; 

    V_TABLE_LIST V_LIST_TYPE := V_LIST_TYPE('TABLE1', 'TABLE2', 'TABLE3'); 

    FOR L_ITER IN 1..V_TABLE_LIST.COUNT 
    LOOP 
     EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || v_YOUR_SCHEMA ||'.' ||V_TABLE_LIST(L_ITER) INTO V_COUNT; 
     DBMS_OUTPUT.PUT_LINE(V_TABLE_LIST(L_ITER)||' : '||V_COUNT); 
    END LOOP; 
END; 
/

注:ビューALL_TABLESも列num_rowsを持っています、 DBMS_STATSパッケージを使用してテーブルの統計を収集する場合にのみ、 が入力されます。

+1

なぜUSER_TABLESから選択しませんか?また、 'analyze'は10年以上非推奨です:常に[DBMS_STATS'パッケージを使用してください](https://docs.oracle.com/cloud/latest/db121/ARPLS/d_stats.htm)。 – APC

+0

テーブルリストを指定する場所はどこですか? –

+0

'where'節にあります。 –

関連する問題