| この記事の要点 |
|
結論: SYSCAT.COLUMNS をスキーマ名で絞る
Db2 for Linux, UNIX and Windows(LUW)では、「SYSCAT.COLUMNS」カタログビューにデータベース内のすべてのカラム情報が格納されています。TABSCHEMA カラムにスキーマ名を条件として指定することで、対象のスキーマを絞ることができます。
SELECT * FROM SYSCAT.COLUMNS WHERE TABSCHEMA = 'SCHEMA_NAME'
これで、指定したスキーマにあるすべての表・ビューの、すべてのカラムが 1 行ずつ返ります。
実用的なクエリ: 必要な列に絞って並べる
SELECT * では列が多すぎて読みにくいため、テーブル定義書を作るような用途では次のように列を選び、テーブル名とカラムの順番で並べ替えます。
SELECT
TABNAME,
COLNO,
COLNAME,
TYPENAME,
LENGTH,
SCALE,
NULLS,
DEFAULT,
KEYSEQ,
REMARKS
FROM SYSCAT.COLUMNS
WHERE TABSCHEMA = 'SCHEMA_NAME'
ORDER BY TABNAME, COLNO
主な列の意味
| 列名 | 内容 |
|---|---|
| TABSCHEMA | スキーマ名 |
| TABNAME | 表(またはビュー)の名前 |
| COLNAME | カラム名 |
| COLNO | 表の中でのカラムの位置(0 から始まる) |
| TYPENAME | データ型名(VARCHAR、INTEGER、DECIMAL、TIMESTAMP など) |
| LENGTH | 長さ。DECIMAL の場合は精度(全体の桁数) |
| SCALE | DECIMAL の小数部の桁数 |
| NULLS | NULL を許可するなら 'Y'、NOT NULL なら 'N' |
| DEFAULT | デフォルト値(未設定なら NULL) |
| KEYSEQ | 主キーを構成する列なら、その中での順番。主キーでなければ NULL |
| IDENTITY | ID 列(自動採番)なら 'Y' |
| REMARKS | COMMENT ON COLUMN で付けたコメント |
条件を追加して絞り込む
特定のテーブルだけ
SELECT COLNO, COLNAME, TYPENAME, LENGTH, SCALE, NULLS
FROM SYSCAT.COLUMNS
WHERE TABSCHEMA = 'SCHEMA_NAME'
AND TABNAME = 'TABLE_NAME'
ORDER BY COLNO
ビューを除いて表だけ
SYSCAT.COLUMNS にはビューのカラムも含まれます。表だけにしたい場合は SYSCAT.TABLES と結合し、TYPE が 'T'(表)のものに絞ります。
SELECT c.TABNAME, c.COLNO, c.COLNAME, c.TYPENAME, c.LENGTH, c.NULLS
FROM SYSCAT.COLUMNS c
JOIN SYSCAT.TABLES t
ON t.TABSCHEMA = c.TABSCHEMA
AND t.TABNAME = c.TABNAME
WHERE c.TABSCHEMA = 'SCHEMA_NAME'
AND t.TYPE = 'T'
ORDER BY c.TABNAME, c.COLNO
SYSCAT.TABLES の TYPE は、'T' が表、'V' がビュー、'A' が別名(エイリアス)などを表します。
特定のカラム名を持つテーブルを探す
SELECT TABSCHEMA, TABNAME, COLNAME, TYPENAME
FROM SYSCAT.COLUMNS
WHERE COLNAME LIKE '%CUSTOMER_ID%'
ORDER BY TABSCHEMA, TABNAME
影響調査で「この項目を使っている表はどれか」を調べるときに便利です。
落とし穴
- 大文字・小文字: Db2 は引用符なしで作成した名前を大文字で格納します。
TABSCHEMA = 'myschema'のように小文字で書くと 0 件になるので、大文字で指定するかUPPER()を使います - 引用符付きで作られた名前:
CREATE TABLE "MyTable"のように引用符付きで作成した場合は、大文字小文字がそのまま保存されます。0 件のときはUPPER(TABNAME) LIKE '%MYTABLE%'のように大文字にそろえた部分一致で実際の名前を確認してください - システムスキーマ: スキーマを指定しないと SYSCAT や SYSIBM などのシステムカタログのカラムまで大量に返ります
- z/OS 版との違い: Db2 for z/OS には SYSCAT ビューがなく、
SYSIBM.SYSCOLUMNSを使います。列名も TBCREATOR(スキーマ)、TBNAME(表名)、NAME(カラム名)、COLTYPE(型)のように異なります
SQL 以外で確認する方法
コマンド行プロセッサ(CLP)からなら、1 つのテーブルの定義は DESCRIBE で確認できます。
db2 connect to SAMPLE
db2 "DESCRIBE TABLE SCHEMA_NAME.TABLE_NAME"
CREATE TABLE 文(DDL)として出力したい場合は db2look コマンドを使います。詳しくは テーブル定義からDDL(CREATE TABLE)を生成する方法 を参照してください。
関連
- MySQL / MariaDB で information_schema.columns から特定スキーマの全カラム情報を取得する方法
- SQL メタデータ (information_schema) 完全ガイド
- MySQL テーブル定義の確認方法完全ガイド
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38