Web
Analytics

社畜ゲートウェイ

京成・京急を中心に取り上げる阪急ファンのブログです。日本一遅い速報を届けます。

MENU

【スポンサーリンク】

【Oracle】データベース内の全てのテーブルの一覧を確認するSQL

【スポンサーリンク】

データベース内にあるテーブルの一覧を確認する方法です。

データベース内のテーブルを確認するには

データベース内のテーブルを確認する方法はいくつかあります。FROM句に次のいずれかを指定すれば、テーブルの一覧を確認することが可能です。

  • USER_TABLES
  • ALL_TABLES
  • DBA_TABLES

各テーブルのスコープは以下となります。

 テーブル名 スコープ
USER_TABLES ログインユーザーのテーブル一覧
ALL_TABLES ログインユーザーがアクセスできるすべてのテーブル一覧
DBA_TABLES データベース内のすべてのテーブル一覧

ただし、注意が必要です。「USER_TABLES」と「ALL_TABLES」についてはそのまま使用することが可能ですが、「DBA_TABLES」についてはDBAロール*1もしくは、SYSDBA権限を有するユーザーでSQLを実行する必要があります。

 

仮にDBAロール、SYSDBA権限を持っていないユーザーが「DBA_TABLES」に問い合わせても「ORA-00942: 表またはビューが存在しません。」とエラーが返ってきます。

各テーブルのカラムについてはOracleのリファレンスを参照頂きたく。読めば大体わかると思います。

docs.oracle.com

 

サンプルSQL

テーブル一覧を取得するためのサンプルSQLです。

--USER_TABLES
SELECT * FROM USER_TABLES;

--ALL_TABLES
SELECT * FROM ALL_TABLES;

--DBA_TABLES
SELECT * FROM DBA_TABLES;

基本形としては上記のサンプルで事足りると思いますが、DBA_TABLESに対して問い合わせる場合は権限の強いユーザーが必要となりますので、扱いには注意しましょう。基本的にはUSER_TABLESかALL_TABLESで事足りると思います。

で、これらのサンプルをどう利用するかはあなた次第となってしまうのですが、例えば、「特定のスキーマ(ユーザー)でテーブル名に"hoge"を含む」とかに使えます。

--ALL_TABLES
SELECT * FROM ALL_TABLES
WHERE OWNER = '指定したスキーマ(ユーザー)'
AND TABLE_NAME LIKE '%hoge%'

所感ですが、使いどころが多いのはALL_TABLESかと。指定したスキーマ(ユーザー)のテーブル一覧を取得したい時などに使えます。

 

編集後記

NUM_ROWSカラムがあるので、各テーブルのレコード数一覧を取得したい時にも使用できます。条件付けないとOracle側が用意しているテーブルも拾ってくるのでそこは注意です。

 

関連記事

www.stellacreate.com

www.stellacreate.com

参考サイト

docs.oracle.com

*1:Database Administrator(データベース管理者)