1. ホーム
  2. sql

[解決済み] Oracleの全テーブルのリストを取得しますか?

2022-03-17 01:55:24

質問

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はまた、レガシーなデータディクショナリー・ビューを数多く持っている--。 TAB , DICT , TABS および CAT などを使用することができます。 一般的に、Oracle 6 にスクリプトをバックポートする必要がない限り、これらのレガシーなビューを使用することはお勧めしません。 Oracle は長い間これらのビューを変更していないため、新しいタイプのオブジェクトで問題が発生することがよくあります。 たとえば TABCAT ビューはどちらもユーザーのごみ箱にあるテーブルの情報を表示するのに対し [DBA|ALL|USER]_TABLES ビューはすべてそれらをフィルタリングします。 CAT はまた、マテリアライズド・ビューのログに関する情報を TABLE_TYPE を使用していますが、これは本当に必要なものではなさそうです。 DICT はテーブルと同義語を組み合わせたもので、オブジェクトの所有者を教えてくれません。