Oracleデータベースのクエリを実行して、データベース内のすべてのテーブルの名前を表示するにはどうすればよいですか?
SELECT owner, table_name
FROM dba_tables
これは、DBA_TABLES
データディクショナリビューへのアクセス権を持っていることを前提としています。 これらの権限を持っていないが必要な場合は、DBAにそのテーブルに対する権限を明示的に付与してもらうか、DBAにSELECT ANY DICTIONARY
権限やSELECT_CATALOG_ROLE
ロールを付与してもらうように要求することができます(いずれも任意のデータ辞書テーブルを照会することができます)。 もちろん、SYS
やSYSTEM
のような特定のスキーマを除外することもできます。これらのスキーマには、おそらく気にしないような大量の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には、TAB
、DICT
、TABS
、CAT
など、数多くのレガシーデータディクショナリビューがあり、これらを使用することができます。 一般的には、スクリプトをOracle 6にバックポートする必要がない限り、これらのレガシービューを使用することはお勧めしません。 オラクルは長い間これらのビューを変更していないので、新しいタイプのオブジェクトには問題があることが多いのです。 例えば、[DBA|ALL|USER]_TABLES
ビューではユーザーのごみ箱に入っているテーブルの情報が表示されますが、CAT
ビューではそれらの情報がフィルタリングされて表示されます。 また、CAT
は TABLE_TYPE
が "TABLE" であるマテリアライズド・ビュー・ログの情報を表示しますが、これは実際に必要なものではないと思われます。 DICT` はテーブルとシノニムを組み合わせたもので、誰がそのオブジェクトを所有しているのかを教えてくれません。