2017-04-23 10 views
0

複数のテーブル(1000+テーブル)からカウントを取得し、同じ値を1つの値に集計する必要があります。複数のテーブルから数を集計するOracleクエリ

たとえば、TAで始まる表。これらの表のみを考慮する必要があります。

実際のカウントが必要なので、DBA_TABLES/ALL_TABLESを使用したくありません。

私にこれを行う最善の方法を提案してください。私はこれらのテーブルのすべてのレコードのSumの単一の値が必要です。

おかげ

+0

おかげゴビ。実際のカウントが必要だと言いましたが、1000nthテーブルをカウントするまでに最初のテーブルのカウントが変更されている可能性があるので、データ・ディクショナリの統計情報がこのタイプでは非常に便利であるため、状況の統計を集計して行数の精度を上げる場合、 'estimate_percent'を' 100'に設定しようとしましたか(一般的な統計収集にはお勧めできません)。 – alexgibbs

答えて

0

例:

CREATE TABLE TA_1 AS select * FROM all_objects; 
CREATE TABLE TA_2 AS select * FROM TA_1; 
CREATE TABLE TA_abcd AS select * FROM TA_1; 

select count(*) FROM TA_1; 

    COUNT(*) 
---------- 
    73701 

DECLARE 
    partial_cnt NUMBER; 
    final_cnt NUMBER := 0; 
BEGIN 
    FOR tab_name IN (SELECT table_name FROM user_tables WHERE table_name LIKE 'TA%') 
    LOOP 
     EXECUTE IMMEDIATE 'SELECT count(*) FROM '|| tab_name.table_name INTO partial_cnt; 
     final_cnt := final_cnt + partial_cnt; 
    END LOOP; 
    DBMS_OUTPUT.PUT_LINE('Total count = ' || final_cnt); 
END; 
/

Total count = 221103 
関連する問題