◀ 3.

Db2のテーブル一覧|LIST TABLES・SYSCAT.TABLESとスキーマの確認

▶

Db2 LUWでは、CLPのLIST TABLESか、SQLのSYSCAT.TABLES参照で一覧を調べます。実行する入口と対象スキーマを先に決め、一覧に名前が出ることを、その表のデータを読める権限の証明にはしません。

CLPかSQLかを選び、接続中DBとスキーマを確認して、一覧と実データ権限を分ける図

CLPとSQLエディターで使うものを選ぶ

下の元の例にある「db2 =>」はCLPのプロンプトで、入力するコマンドの一部ではありません。LIST TABLESやDESCRIBE TABLEをJDBCへSQL文として送らず、アプリやSQLエディターではカタログをSELECTします。MySQLのSHOW TABLESと取り違えないでください。

一覧の対象は接続中のDBです。サーバー名/DB別名・実行しているツール・明示するスキーマを確認してから調べます。接続がない場合の暗黙接続設定もあるため、想定外の既定DBへつながっていないか確認してください。

長い名前が切れて見える場合は、CLPのLIST TABLES ... SHOW DETAILを確認します。公式資料では、通常表示で表名30文字・スキーマ名14文字を超える部分が省略されるため、表示の切り詰めだけを別名や欠落と判断しません。IBM Db2 11.5コマンド資料のLIST PACKAGES/TABLESを参照してください。

この記事の要点
  • Db2 LUWでテーブル一覧を確認する方法。CLPコマンドとSQLを区別
  • 既定の一覧: db2 => list tables(FOR USER)。所有者による絞り込みとは区別
  • 特定スキーマ: list tables for schema SCHEMA / 全件: list tables for all
  • 細かいフィルタは SYSCAT.TABLES を SELECT(TYPE = 'T' で通常テーブル)

 

本稿はDb2 LUWのテーブル一覧を確認する方法を説明します。スキーマで探すことと所有者で探すことを分け、接続中のデータベースと取得対象を確認します。Db2 for i / z/OSへ同じカタログ名をそのまま当てはめる記事ではありません。

1. list tables コマンドで確認

DBに接続し、対話モード(CLP)で以下のコマンドを実行します。

db2 => list tables

FORを省略するとFOR USERです。IBMのLUWコマンド資料には、ユーザー向けの一覧に対応するSQLとしてTABSCHEMA = USERの例があります。「そのユーザーが所有する全オブジェクト」を取り出す条件と同じではありません。明示したスキーマを探す場合は次のFOR SCHEMAを使い、スキーマ名と所有者を混同しません。

2. 特定スキーマのテーブル一覧

db2 => list tables for schema SCHEMA

3. 接続中DB全体の一覧

db2 => list tables for all

4. SQLで取得する(SYSCAT.TABLES)

プログラム経由や、テーブル種別・作成日でフィルタしたい場合はシステムカタログを使います。

SELECT TABSCHEMA, TABNAME, TYPE, CREATE_TIME
FROM SYSCAT.TABLES
WHERE TABSCHEMA = 'SCHEMA'
  AND TYPE = 'T'
ORDER BY TABNAME;

TYPE 列はテーブル種別を表します。

TYPE意味
T通常テーブル
Vビュー
Aエイリアス
Sサマリーテーブル(MQT)
Nニックネーム(フェデレーション)

5. テーブル名で部分検索

SELECT TABSCHEMA, TABNAME
FROM SYSCAT.TABLES
WHERE TABNAME LIKE 'USER%';

関連コマンド

  • list tables: 既定のFOR USERの一覧。CURRENT SCHEMAを変えたことだけで一覧対象も切り替わると決めつけない
  • list tables for schema SCHEMA: 特定スキーマ
  • list tables for all: 接続中DBの全体一覧。別DBまで横断するコマンドではない
  • describe table TABLE: テーブル定義の確認
  • SYSCAT.TABLES: SQLでテーブル一覧を取得

注意点

  • 通常の識別子は大文字へ変換されますが、二重引用符で囲んだ区切り識別子では小文字も使用できます。カタログの名前を確かめ、SQLの文字列条件まで一律に大文字へ変えないでください
  • list tables のような CLP コマンドは、JDBC 経由では実行できない。アプリから取得したい場合は SYSCAT.TABLES を使う
  • SYSCAT.TABLES にはシステム側のオブジェクトも含まれます。必要な業務スキーマを明示するのが基本です。TABSCHEMA NOT LIKE 'SYS%' は名前の接頭辞による除外にすぎず、用途・所有者・操作権限を判定する条件ではありません

アプリからスキーマを指定して取得するSQL

以下の?はJDBC等のprepared statementへ渡す値のパラメータです。実行前に実在するスキーマ名を1番目のパラメータへ文字列として設定します。CLPへ?付きのまま貼り付ける完成コマンドではありません。DB名・表名を入力値から連結する例でもありません。

SELECT TABSCHEMA, TABNAME, TYPE, CREATE_TIME
FROM SYSCAT.TABLES
WHERE TABSCHEMA = ?
  AND TYPE = 'T'
ORDER BY TABSCHEMA, TABNAME;

たとえばAPPという通常の識別子で作成したスキーマならAPPを、"Sales"という区切り識別子で作成したものならSalesを値として渡します。区切りの二重引用符自体は値に含めません。SQLの文字列リテラルと識別子の引用を区別し、検索のために既存オブジェクトを改名したり照合規則を変更したりしないでください。

この例はTYPE = 'T'に限定します。ビュー/エイリアス/MQT/型付き表などが必要なら、対象版のSYSCAT.TABLESのTYPE定義を先に確認して条件を選びます。元の「通常テーブル」という説明を、あらゆる種類の表を含む意味に広げないでください。複数スキーマに広げる場合も、名前だけでなくTABSCHEMAとTABNAMEを組にして識別します。

名前で検索するときの注意

元のLIKE 'USER%'はUSERから始まる名前の検索です。%は任意長、_は1文字のワイルドカードなので、文字そのものとして含む名前の検索とは別です。元の例にはスキーマ/TYPE条件や並び順がないため、別スキーマの同名オブジェクトやビュー等も対象になり得ます。必要な条件を先に決め、値はパラメータで渡します。バインドしてもLIKEのワイルドカードの意味が消えるわけではありません。

一覧が空・実データを読めない場合

  1. 接続中DB、指定スキーマ、名前の大小文字と区切り識別子を照合する。
  2. TYPE条件で目的のオブジェクトを除外していないか確認する。まず存在する名前を記録し、表を新規作成して埋め合わせない。
  3. カタログを読む権限と対象表のSELECT等の権限を分けて確認する。名前が見えるだけでデータ参照可とは判断しない。
  4. エラー時はSQLSTATE/SQLCODEと実行した入口を記録する。管理者権限の全面付与や本番設定変更を一律の対処にしない。

2026年10月、IBM公式の識別子の規則と上記コマンド資料を照合しています。Db2実機でのCLP/JDBC/権限設定はこの更新では未検証です。関連項目は親のDB2ページの子ページから選択してください。元の5つのコード表は本文中に保持しています。

子ページ

子ページはありません

同階層のページ
  1. DB接続コマンド
  2. データベース一覧の確認
  3. テーブル一覧の確認
  4. テーブル定義の確認
  5. DBの設定確認
  6. テーブルスペースの容量の確認および拡張
  7. データ型
  8. 複数カラムのUPDATE
  9. カラムの追加/削除/変更
  10. 自動番号付け (autoincrement) する方法
  11. インデックスの作成
  12. シーケンスおよびインクリメント(ID列)の違いと確認方法
  13. create table文の生成
  14. 特定スキーマの全テーブルの全カラム情報を取得する方法
  15. 【DB2】エラー一覧
  16. 【DB2】テーブル定義からCREATE TABLE文を生成する方法

最近更新/作成されたページ