Oracleのすべてのテーブルのリストを取得するには?

Oracleデータベースのクエリを実行して、データベース内のすべてのテーブルの名前を表示するにはどうすればよいですか?

ソリューション
SELECT owner, table_name
  FROM dba_tables

これは、DBA_TABLESデータディクショナリビューへのアクセス権を持っていることを前提としています。 これらの権限を持っていないが必要な場合は、DBAにそのテーブルに対する権限を明示的に付与してもらうか、DBAにSELECT ANY DICTIONARY権限やSELECT_CATALOG_ROLEロールを付与してもらうように要求することができます(いずれも任意のデータ辞書テーブルを照会することができます)。 もちろん、SYSSYSTEMのような特定のスキーマを除外することもできます。これらのスキーマには、おそらく気にしないような大量のOracleテーブルがあります。

また、DBA_TABLESにアクセスできない場合は、ALL_TABLESビューで、自分のアカウントがアクセスできるすべてのテーブルを見ることができます。

SELECT owner, table_name
  FROM all_tables

ただし、これはデータベースで利用可能なテーブルのサブセットである可能性があります(ALL_TABLESは、ユーザーがアクセスを許可されているすべてのテーブルの情報を表示します)。

自分がアクセスできるテーブルではなく、自分が所有しているテーブルにのみ関心がある場合は、USER_TABLESを使用することができます。

SELECT table_name
  FROM user_tables

USER_TABLESは自分が所有しているテーブルの情報のみを持っているので、OWNER`列はありません。

Oracleには、TABDICTTABSCATなど、数多くのレガシーデータディクショナリビューがあり、これらを使用することができます。 一般的には、スクリプトをOracle 6にバックポートする必要がない限り、これらのレガシービューを使用することはお勧めしません。 オラクルは長い間これらのビューを変更していないので、新しいタイプのオブジェクトには問題があることが多いのです。 例えば、[DBA|ALL|USER]_TABLESビューではユーザーのごみ箱に入っているテーブルの情報が表示されますが、CATビューではそれらの情報がフィルタリングされて表示されます。 また、CATTABLE_TYPE が "TABLE" であるマテリアライズド・ビュー・ログの情報を表示しますが、これは実際に必要なものではないと思われます。 DICT` はテーブルとシノニムを組み合わせたもので、誰がそのオブジェクトを所有しているのかを教えてくれません。

解説 (6)

user_tables "と "dba_tables "への問い合わせがうまくいかない。
これはうまくいきました。

select table_name from all_tables  
解説 (1)

現在のユーザーが所有しているテーブルを一覧表示するuser_tablesから選択してみてください。

解説 (0)