Oracle データベースをクエリして、データベース内のすべてのテーブルの名前を表示するにはどうすればよいでしょうか?
ベストアンサー1
SELECT owner, table_name
FROM dba_tables
これは、データ ディクショナリ ビューにアクセスできることを前提としていますDBA_TABLES
。これらの権限を持っていないが必要なら、DBA に明示的にそのテーブルに対する権限を付与してもらうか、権限SELECT ANY DICTIONARY
またはロールを付与してもらうよう DBA に依頼することができます (どちらの場合も、任意のデータ ディクショナリ テーブルをクエリできます)。もちろん、おそらく必要のない Oracle テーブルが多数含まれるやSELECT_CATALOG_ROLE
などの特定のスキーマを除外することもできます。SYS
SYSTEM
または、 へのアクセス権がない場合はDBA_TABLES
、ビューを通じてアカウントがアクセスできるすべてのテーブルを表示できますALL_TABLES
。
SELECT owner, table_name
FROM all_tables
ただし、これはデータベースで使用可能なテーブルのサブセットである可能性があります (ALL_TABLES
ユーザーにアクセス権が付与されているすべてのテーブルの情報が表示されます)。
自分が所有するテーブルのみを対象とし、アクセス権を持つテーブルを対象としない場合は、次を使用できますUSER_TABLES
。
SELECT table_name
FROM user_tables
USER_TABLES
には自分が所有するテーブルに関する情報のみが含まれているため、OWNER
列はありません。定義上、所有者は自分です。
TAB
Oracle には、、、、DICT
などTABS
、CAT
使用できるレガシー データ ディクショナリ ビューも多数あります。一般に、スクリプトを Oracle 6 にバックポートする必要が絶対にない限り、これらのレガシー ビューの使用はお勧めしません。Oracle はこれらのビューを長い間変更していないため、新しいタイプのオブジェクトで問題が発生することがよくあります。たとえば、ビューTAB
とCAT
ビューはどちらもユーザーのごみ箱にあるテーブルに関する情報を表示しますが、[DBA|ALL|USER]_TABLES
ビューはすべてそれらをフィルター処理します。CAT
また、ビューは「TABLE」のマテリアライズド ビュー ログに関する情報も表示しますが、TABLE_TYPE
これはおそらく必要な情報ではありません。はDICT
テーブルとシノニムを結合しますが、オブジェクトの所有者は表示しません。