データベース内にあるテーブルの一覧を確認する方法です。
データベース内のテーブルを確認するには
データベース内のテーブルを確認する方法はいくつかあります。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のリファレンスを参照頂きたく。読めば大体わかると思います。
サンプル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側が用意しているテーブルも拾ってくるのでそこは注意です。
関連記事
参考サイト
.