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


1102

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


1
DOES SHOW TABLES(MySQLの中で行われたように)動作しますか?
マーティントーマ2017

1
@MartinThomaいいえ。グーグルに頼る前に、最初にそれを試しました
Adam Burley

回答:


1364
SELECT owner, table_name
  FROM dba_tables

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

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

SELECT owner, table_name
  FROM all_tables

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

自分がアクセスできるテーブルではなく、自分が所有するテーブルだけに関心がある場合は、次のように使用できますUSER_TABLES

SELECT table_name
  FROM user_tables

以来USER_TABLES唯一のあなたが所有していることの表についての情報を持っている、それは持っていないOWNER列-定義によって所有者を、あなたはあります。

Oracleはまた、辞書views--レガシーデータの数を持ってTABDICTTABS、およびCAT使用することができexample--ため。一般に、スクリプトをOracle 6にバックポートする必要がない限り、これらのレガシービューを使用することはお勧めしません。たとえばTABCATビューとビューはどちらもユーザーのごみ箱にあるテーブルに関する情報を表示しますが、[DBA|ALL|USER]_TABLESビューはすべてそれらを除外します。 CATまたTABLE_TYPE、「TABLE」のマテリアライズドビューログに関する情報も表示されます。 DICTテーブルとシノニムを組み合わせたもので、オブジェクトの所有者はわかりません。


9
私は、「ORA-00942:表またはビューが存在しません」例外を取得しています
vitule

46
次に、データベース内のすべてのテーブルを表示する権限が与えられていません。ALL_TABLESデータディクショナリビューをクエリして、アクセスが許可されているすべてのテーブルを確認できます。これは、データベース内のテーブルの小さなサブセットである可能性があります。
ジャスティンケイブ

日常のsqlplusユーザーではない場合の単純な間違い:上記のコマンドで結果が得られない場合は、末尾のセミコロン( ';')を追加します:)。
Gimhani

Oracle 12c以降、結果セットからシステムテーブルを削除するのに役立つ列がdba_usersデータディクショナリにあることに注意してください。完全なクエリは、所有者がいないdba_tablesからの所有者table_nameのSELECTです(dba_usersからユーザー名を選択しますoracle_maintained = 'Y'からユーザー名を選択します)
saritonin

181

クエリuser_tablesを実行dba_tablesしても機能しませんでした。
これはしました:

select table_name from all_tables  

14
@LimitedAtonement申し訳ありませんが、それは明らかに間違っています。ビューは、user_tableではなく、user_tablesと呼ばれます。user_tablesがvituleで機能しない場合、何か他のことがおかしかったです。
フランクシュミット2013

67

さらに一歩進んで、cols(all_tab_columns)と呼ばれる別のビューがあります。これは、特定の列名を含むテーブルを確認するために使用できます。

例えば:

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

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

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


4
私はそうしselect * from cols、0行が返されました。
Gabe 14

50

で見やすくするには 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;

結果

これにより、次のようにかなり受け入れられるようになります。

結果


8
「見やすく」アドバイスに感謝していますが、overwrittingされていないpagesize 30pagesize 1000
Pablo Recalde


18
    select object_name from user_objects where object_type='TABLE';

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

    select * from tab;

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

    select table_name from user_tables;



9

以下のクエリを使用してすべてのテーブルの名前を表示する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


8

これらのいずれかを使用すると、以下を選択できます。

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
select * from dba_tables

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


4
それは実際には正しくありません。SYSDBAは必要ありません。DBA_TABLESにはさまざまな方法でアクセスできます。1.)SYSによるオブジェクトへのオブジェクトへの直接付与。2.)ユーザーにSELECT ANY DICTIONARY特権を付与します。3.)SELECT_CATALOG_ROLEロールの付与。
Mark J. Bobak 2013年


4

Oracleデータディクショナリを使用して、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


4

ビューを含む:

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

4

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

SELECT * FROM user_tab_columns;

4

以下は、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;

2

次のクエリは必要なデータのみを一覧表示しますが、他の回答では混乱を招く余分なデータが表示されました。

select table_name from user_tables;

2

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

Tables エイリアス。

次に、機能の使用法と追加の側面を示すいくつかの例を示します。最初に、sqlコマンドライン(sql.exeWindowsの場合)セッションに接続します。データを表示する他のコマンドまたはクエリを実行する前に、この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

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

ジェフ・スミスここでエイリアスについて詳しく説明しています


1

列IDの順序でソートされたスキーマのテーブルに属するすべての列名のリストを取得しようとしていました。

これが私が使っているクエリです:-

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

1

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

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

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

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

  1. テーブル定義を含むデータディクショナリを生成します
    • Toadデータモデラー:メニュー->モデル->レポートの生成->実行
    • ERBuilderデータモデラー:メニュー->ツール->モデルドキュメントの生成

0
select * from all_all_tables

最初にこの「すべて」を追加すると、次の3つの列が追加されます。

OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE

この回答と同じですよね?
mustaccio
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.