Oracle のすべてのテーブルのリストを取得しますか? 質問する

Oracle のすべてのテーブルのリストを取得しますか? 質問する

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

ベストアンサー1

SELECT owner, table_name
  FROM dba_tables

これは、データ ディクショナリ ビューにアクセスできることを前提としていますDBA_TABLES。これらの権限を持っていないが必要なら、DBA に明示的にそのテーブルに対する権限を付与してもらうか、権限SELECT ANY DICTIONARYまたはロールを付与してもらうよう DBA に依頼することができます (どちらの場合も、任意のデータ ディクショナリ テーブルをクエリできます)。もちろん、おそらく必要のない Oracle テーブルが多数含まれるSELECT_CATALOG_ROLEなどの特定のスキーマを除外することもできます。SYSSYSTEM

または、 へのアクセス権がない場合はDBA_TABLES、ビューを通じてアカウントがアクセスできるすべてのテーブルを表示できますALL_TABLES

SELECT owner, table_name
  FROM all_tables

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

自分が所有するテーブルのみを対象とし、アクセス権を持つテーブルを対象としない場合は、次を使用できますUSER_TABLES

SELECT table_name
  FROM user_tables

USER_TABLESには自分が所有するテーブルに関する情報のみが含まれているため、OWNER列はありません。定義上、所有者は自分です。

TABOracle には、、、、DICTなどTABSCAT使用できるレガシー データ ディクショナリ ビューも多数あります。一般に、スクリプトを Oracle 6 にバックポートする必要が絶対にない限り、これらのレガシー ビューの使用はお勧めしません。Oracle はこれらのビューを長い間変更していないため、新しいタイプのオブジェクトで問題が発生することがよくあります。たとえば、ビューTABCATビューはどちらもユーザーのごみ箱にあるテーブルに関する情報を表示しますが、[DBA|ALL|USER]_TABLESビューはすべてそれらをフィルター処理します。CATまた、ビューは「TABLE」のマテリアライズド ビュー ログに関する情報も表示しますが、TABLE_TYPEこれはおそらく必要な情報ではありません。はDICTテーブルとシノニムを結合しますが、オブジェクトの所有者は表示しません。

おすすめ記事