web-dev-qa-db-ja.com

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

Oracleデータベースに問い合わせて、その中のすべてのテーブルの名前を表示するにはどうすればよいですか。

1024
vitule
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にバックポートする必要がある場合を除き、これらのレガシービューを使用することはお勧めしません。Oracleはこれらのビューを長い間変更していないため、新しいタイプのオブジェクトで問題が発生します。たとえば、TABビューとCATビューはどちらもユーザーのごみ箱に入っている表に関する情報を表示しますが、[DBA|ALL|USER]_TABLESビューはすべてそれらを除外します。 CATは、実体化されたビューログについての情報も "TABLE"のTABLE_TYPEで表示します。 DICTはテーブルと同義語を組み合わせたもので、誰がそのオブジェクトを所有しているのかはわかりません。

1271
Justin Cave

user_tablesdba_tablesの問い合わせはうまくいきませんでした。
これは、 

select table_name from all_tables  
169
vitule

さらに一歩進んで、cols(all_tab_columns)という別のビューがあります。これを使用して、どのテーブルに特定の列名が含まれているかを確認できます。

例えば:

SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';

eSTで始まる名前とCALLREFを含む列を名前のどこかに含むすべてのテーブルを検索します。

これは、たとえばテーブルや列の命名規則によっては、結合する列を決めるときに役立ちます。

62
stealth_angoid

sqlplusで見やすくするために

sqlplusを使用しているのであれば、あなたのコラムが壊れている場合、最初に見やすくするためにいくつかのパラメータを設定することをお勧めします(これらの変数はsqlplusセッションを終了した後は持続しません)

set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000

すべての表を表示

その後、このようなものを使用してすべてのテーブル名を確認できます。

SELECT table_name, owner, tablespace_name FROM all_tables;

自分のテーブルを表示する

@Justin Caveが述べているように、あなたはあなたが所有するテーブルだけを表示するためにこれを使うことができます。

SELECT table_name FROM user_tables;

ビューを忘れないで

いくつかの "テーブル"は実際には "ビュー"であるかもしれないので、次のようなものを実行してみることもできます。

SELECT view_name FROM all_views;

結果

これは、次のようにかなり許容できるものに見えるはずです。

result

46
cwd

現在のユーザーのテーブルを選択するための簡単なクエリ:

  SELECT table_name FROM user_tables;
21
    select object_name from user_objects where object_type='TABLE';

----------------または------------------

    select * from tab;

----------------または------------------

    select table_name from user_tables;
17
Harshil

以下のデータディクショナリビューを試してください。

tabs
dba_tables
all_tables
user_tables

これには3つのdatadictinaryがあります 

DBA_TABLESは、データベース内のすべてのリレーショナル表を記述します。

SELECT owner, table_name
  FROM dba_tables

ユーザーがアクセスできるリレーショナルテーブルの説明

SELECT owner, table_name
  FROM all_tables

USER_TABLES 現在のユーザーが所有するリレーショナルテーブルを記述します。このビューには _ owner _ 列は表示されません。

SELECT table_name
  FROM user_tables
9
Kamil Ibadov

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

8
Eddie Awad

これらのどれでも、あなたは選ぶことができます:

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM DBA_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM ALL_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';
6
Van Gogh
select * from dba_tables

あなたがログインしたユーザーがsysdba特権を持っている場合にのみ、すべてのユーザーのすべてのテーブルを与えます。

5
praveen2609

以下のクエリを使用してすべてのテーブルの名前を表示するOracleデータベース

 SELECT所有者、table_name FROM dba_tables; 
 
 SELECT所有者、table_name FROM all_tables; 
 
 SELECT table_name FROM user_tables;

もっと見る: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-Oracle.html

5
Brahmareddy K

以下のクエリから列の詳細を含むすべてのテーブルを取得できます。

SELECT * FROM user_tab_columns;
3
aim_thebest

ビューを含める:

SELECT owner, table_name as table_view
  FROM dba_tables
UNION ALL
SELECT owner, view_name as table_view
  FROM DBA_VIEWS
3
Punnerud

Oracle Data Dictionary を使用すると、Oracleオブジェクトに関する情報を取得できます。

テーブルのリストはさまざまな方法で取得できます。

select * 
from dba_tables

または例えば:

select * 
from dba_objects 
where object_type = 'TABLE' 

その後、テーブル名を使ってテーブルの列を取得できます。

select * 
from dba_tab_columns

そうすれば、依存関係(トリガー、ビューなど)のリストを取得できます。

select * 
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name 

それからあなたはこのオブジェクトのテキストソースを得ることができます:

select * from dba_source

また、必要に応じてUSERの代わりにALLまたはDBAビューを使用することもできます。

3
Slava Babin

以下は、オプションをどのように利用できるかを説明したSQLクエリーのコメント断片です。

-- need to have select catalog role
SELECT * FROM dba_tables;

-- to see tables of your schema
SELECT * FROM user_tables;

-- tables inside your schema and tables of other schema which you possess select grants on
SELECT * FROM all_tables;
3
Prashant Mishra

使うべき答えが見つかりませんでした 

DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)

このビューは実際にはDBA_TABLES以上のものを返すので、オブジェクト表も返されます( http://docs.Oracle.com/cd/E11882_01/server.112/e40402) /statviews_1003.htm )。

3
Rusty

SQLcl (Oracle Database用の無料のコマンドライン・インタフェース)で使用可能な新機能は次のとおりです。

Tablesalias。

これは、機能の使用方法と追加の側面を示すいくつかの例です。まず、sqlコマンドライン(Windowsではsql.exe)セッションに接続します。データを表示する他のコマンドまたは照会を実行する前に、このsqlcl固有のコマンドを入力することをお勧めします。

SQL> set sqlformat ansiconsole     -- resizes the columns to the width of the 
                                   -- data to save space 

SQL> tables

TABLES
-----------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
..

tablesエイリアスが何を参照しているのかを知るためには、単にalias list <alias>を使うことができます。

SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------

 select table_name "TABLES" from user_tables

この別名は、デフォルトではSQLclの下にあるため、定義する必要はありません。新しいユーザー定義の別名を使用し、バインド引数としてスキーマ名を渡し、表示されている列のセットのみを指定して、特定のスキーマから表をリストする場合は、

SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;

それ以降は、単にスキーマ名を引数として渡します。

SQL> tables_schema HR

OWNER   TABLE_NAME               LAST_ANALYZED
HR      DUMMY1                   18-10-18
HR      YOURTAB2                 16-11-18
HR      YOURTABLE                01-12-18
HR      ID_TABLE                 05-12-18
HR      REGIONS                  26-05-18
HR      LOCATIONS                26-05-18
HR      DEPARTMENTS              26-05-18
HR      JOBS                     26-05-18
HR      EMPLOYEES                12-10-18
..
..

より洗練された定義済みの別名はTables2と呼ばれ、他のいくつかの列を表示します。

SQL> tables2

Tables
======
TABLE_NAME                 NUM_ROWS   BLOCKS   UNFORMATTED_SIZE COMPRESSION     INDEX_COUNT   CONSTRAINT_COUNT   PART_COUNT LAST_ANALYZED
AN_IP_TABLE                       0        0                  0 Disabled                  0                  0            0 > Month
PARTTABLE                         0        0                  0                           1                  0            1 > Month
TST2                              0        0                  0 Disabled                  0                  0            0 > Month
TST3                              0        0                  0 Disabled                  0                  0            0 > Month
MANAGE_EMPLYEE                    0        0                  0 Disabled                  0                  0            0 > Month
PRODUCT                           0        0                  0 Disabled                  0                  0            0 > Month
ALL_TAB_X78EHRYFK                 0        0                  0 Disabled                  0                  0            0 > Month
TBW                               0        0                  0 Disabled                  0                  0            0 > Month
DEPT                              0        0                  0 Disabled                  0                  0            0 > Month

バックグラウンドでどのクエリが実行されるのかを知るには、次のように入力します。

alias list tables2

これにより、SQL * Plusで一般的に使用される定義済みのcolumn定義とともに、もう少し複雑な問合せが表示されます。

Jeff Smithはエイリアスの詳細を説明します ここ

2
Kaushik Nayak

実際、SQLクエリを使用してテーブルのリストを作成することは可能です。 ERWINToad Data Modeler または ERBuilder 。これらのツールを使用すると、テーブル名に加えて、フィールド、タイプ、オブジェクト(トリガー、シーケンス、ドメイン、ビューなど)を使用できます。

以下の手順に従って、テーブル定義を生成します。

  1. データベースをリバースエンジニアリングする必要があります
    • Toad Data Modelerの場合:メニュー->ファイル->リバースエンジニアリング->リバースエンジニアリングウィザード
    • ERBuilderデータモデラーで:メニュー->ファイル->リバースエンジニアリング

データベースは、エンティティ関係図としてソフトウェアに表示されます。

  1. テーブル定義を含むデータ辞書を生成します
    • Toad Data Modelerの場合:メニュー->モデル->レポートの生成->実行
    • ERBuilderデータモデラーで:メニュー->ツール->モデルドキュメントの生成
1
parash

スキーマのテーブルに属するすべてのカラム名のリストをカラムID順にソートして取得しようとしていました。

これが私が使っている質問です: -

SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;
0
Rakesh Narang

次のクエリでは必要なデータのみがリストされていますが、他の回答では私を混乱させるだけの余分なデータが得られました。

select table_name from user_tables;
0
Mateen