2016-11-25 9 views
1

dba_tab_statisticsでjoinを使用してdba_tablesからテーブル名をフェッチしたいとします。oracleのdba_tablesからテーブル名をフェッチするクエリ

select table_name 
from dba_tables a, 
    dba_tab_statistics b 
where a.owner like 'Owner' and a.table_name not like '%TMP' 
    and a.LAST_ANALYZED IS NOT NULL and a.table_name = b.table_name 
    and b.stattype_locked IS NULL; 

このクエリでは、個別のテーブル名はありません。どのような変更が必要ですか?

+1

は、単に 'DISTINCT'を選択します。 – jarlh

+4

今日のヒント:現代的で明示的な 'JOIN'構文に切り替えます。 (エラーなしで)書きやすく、読みやすく(維持しやすい)、必要に応じて外部結合に変換する方が簡単です。 – jarlh

答えて

1

使用それらのいずれか:

SELECT a.table_name 
    FROM dba_tables a, 
     dba_tab_statistics b 
WHERE  a.owner LIKE 'Owner' 
     AND a.table_name NOT LIKE '%TMP' 
     AND a.LAST_ANALYZED IS NOT NULL 
     AND a.table_name = b.table_name 
     AND b.stattype_locked IS NULL 
group by a.table_name ; 

または

SELECT DISTINCT a.table_name 
    FROM dba_tables a, 
     dba_tab_statistics b 
WHERE  a.owner LIKE 'Owner' 
     AND a.table_name NOT LIKE '%TMP' 
     AND a.LAST_ANALYZED IS NOT NULL 
     AND a.table_name = b.table_name 
     AND b.stattype_locked IS NULL ; 
0

別の解決策:

SELECT table_name 
    FROM dba_tables a 
WHERE owner LIKE 'Owner' 
    AND table_name NOT LIKE '%TMP' 
    AND LAST_ANALYZED IS NOT NULL 
    AND exists (SELECT 0 
       FROM dba_tab_statistics b 
       WHERE a.table_name = b.table_name 
       AND b.stattype_locked IS NULL); 
+0

ありがとうございました。唯一のことは、すなわち15〜20分 – Rax

+0

選択a.table_name DBA_TAB_STATISTICSからのより多くの時間を取っている、どこa.owner「SCHEMA1」 とa.table_name「%TMP」 とa.table_nameないで好きではないようなB をDBA_TABLES ( 'TABLE1'、 'TABLE2'、 'TABLE3') とa.stattype_lockedはNULLで、b.temporary = 'N' グループはa.table_nameで指定します。 max(a.NUM_ROWS) – Rax

関連する問題