Db2 LUWでschema配下の列定義を調べるにはSYSCAT.COLUMNSを使います。表/ビュー等の対象種別と正確な識別子を決めてから検索します。
| この記事の要点 |
|
結論: SYSCAT.COLUMNS をスキーマ名で絞る
Db2 for Linux, UNIX and Windows(LUW)では、「SYSCAT.COLUMNS」カタログビューにデータベース内のすべてのカラム情報が格納されています。TABSCHEMA カラムにスキーマ名を条件として指定することで、対象のスキーマを絞ることができます。
SELECT * FROM SYSCAT.COLUMNS WHERE TABSCHEMA = 'SCHEMA_NAME'
SYSCAT.COLUMNSは表/ビュー/nickname等の列を確認するカタログです。対象DB・schema・参照権限と対象種別を確認し、一覧を読めることと実データのSELECT権限を混同しないでください。
実用的なクエリ: 必要な列に絞って並べる
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の意味は型/定義を確認し、ここだけで元DDLの省略と明示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 にはビューのカラムも含まれます。次のTYPE=Tは通常の非型付き表に限定する例です。typed table、MQT、作成済み一時表等まで含む「全種類の表」とは異なるため、対象種別はSYSCAT.TABLESの資料で選びます。
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' が別名(エイリアス)などを表します。
特定のカラム名を持つテーブルを探す
次の旧LIKE例の_は任意の1文字です。CUSTOMER_IDの文字列にある_もワイルドカードなので、CUSTOMERXID等に一致し得ます。正確な列名なら下のCOLNAME=?の等値検索を使い、部分一致が必要ならLIKEのescapeと入力値の扱いを設計します。
SELECT TABSCHEMA, TABNAME, COLNAME, TYPENAME
FROM SYSCAT.COLUMNS
WHERE COLNAME LIKE '%CUSTOMER_ID%'
ORDER BY TABSCHEMA, TABNAME
列名の候補検索に使えますが、実データやSQLの利用箇所、ビュー/ルーチン/アプリの全依存先を網羅する影響調査ではありません。
落とし穴
- 大文字・小文字: 通常識別子は大文字で保存されますが、引用識別子では小文字等も正確な名前です。検索値やカタログ列を一律にUPPER()で変えると異なる対象を区別できなくなります。0件のときは接続先と正確な名前を照合します。
- 引用符付きで作られた名前:
CREATE TABLE "MyTable"のように引用符付きで作成した場合は、大文字小文字がそのまま保存されます。UPPER(TABNAME)による部分一致は候補探索に限り、保存された名前そのものを返して区別します。候補名を確定せずDDLや実データ照会へ自動転用しないでください。 - システムスキーマ: スキーマを指定しないと SYSCAT や SYSIBM などのシステムカタログのカラムまで大量に返ります
- z/OS 版との違い: Db2 for z/OS には SYSCAT ビューがなく、
SYSIBM.SYSCOLUMNSを使います。列名も TBCREATOR(スキーマ)、TBNAME(表名)、NAME(カラム名)、COLTYPE(型)のように異なります
SQL 以外で確認する方法
1表の列確認にはCLPのDESCRIBEも使えます。下はシェルからDb2 CLPへ渡す例です。SAMPLE/SCHEMA_NAME/TABLE_NAMEは確認済みの対象へ置き換え、引用識別子とOSシェルの引用を分けて確認します。
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 テーブル定義の確認方法完全ガイド
値をバインドして通常表の列を一覧にする
次の例は指定schemaのTYPE=Tに限ります。?へ正確なschema名を1つバインドし、schema/表/列位置で並べます。同じ表名が別schemaにある場合も、JOINの両キーを省略しません。?付きの文はアプリ用で、そのままCLPへ貼る完成例ではありません。
SELECT c.TABSCHEMA, c.TABNAME, c.COLNO, c.COLNAME,
c.TYPENAME, c.LENGTH, c.SCALE, c.NULLS,
c."DEFAULT" AS COLUMN_DEFAULT,
c.IDENTITY, c.GENERATED, c.KEYSEQ, c.REMARKS
FROM SYSCAT.COLUMNS c
JOIN SYSCAT.TABLES t
ON t.TABSCHEMA = c.TABSCHEMA
AND t.TABNAME = c.TABNAME
WHERE c.TABSCHEMA = ?
AND t.TYPE = 'T'
ORDER BY c.TABSCHEMA, c.TABNAME, c.COLNO;
DEFAULTはCOLUMN_DEFAULTという別名で返します。GENERATEDのA/DやIDENTITYも併せて確認し、生成列・IDENTITY・既定値を同じものと扱わないでください。コメント/既定式には内部情報やHTML記号も含み得るため、Webへ表示するなら出力文脈に合わせてエスケープし、スプレッドシートへ出力する場合も数式等の扱いを別途検討します。
正確なカラム名を探す
?へschema名、列名の順にバインドします。%や_、引用符を名前に含んでいても、等値条件ではLIKEのワイルドカードにはなりません。バインドは値を分離するためのもので、schema/表名を入力から直接SQL文字列へ連結する代替ではありません。
SELECT TABSCHEMA, TABNAME, COLNAME, TYPENAME
FROM SYSCAT.COLUMNS
WHERE TABSCHEMA = ?
AND COLNAME = ?
ORDER BY TABSCHEMA, TABNAME, COLNO;
列一覧で分かること・分からないこと
- COLNOは0始まりです。欠落や将来の追加を考慮し、表示行数だけから常に連続番号だと仮定しません。
- LENGTH/SCALEだけで文字列の使用可能文字数や全型の精度を決めず、型と文字列単位・文字コードを公式資料で確認します。NULLS=Nでも空文字や0を禁止する意味ではありません。
- KEYSEQは主キー内の位置の情報で、UNIQUE/外部キー/検査制約・索引全体の一覧ではありません。列一覧だけを完全なCREATE TABLE/移行設計書としません。
- 採取の前後にDDLが変わると比較条件も変わります。接続先・採取時刻・対象版/種別と権限を記録し、本番で参照のために強いロックや設定変更を加えません。
IDENTITYとシーケンスの確認 / 1表の列定義 / Db2親ページの子ページから選択してください。元の関連節のMySQL/information_schema記事は比較資料で、Db2のカタログ構文と混ぜません。
公式:SYSCAT.COLUMNS / SYSCAT.TABLESの対象種別。
対象範囲と検証
主にDb2 LUWを対象とし、2026年10月に公式資料と照合しました。既存のコード/見出し/画像/リンクを保持し、誤案内には近接した訂正を加えました。追加SQLの条件・順序等はメモリ内の合成データで確認しましたが、Db2実機の構文/権限/ロック/負荷・全構成での変更成功を検証したものではありません。Db2親ページの子ページから選択してください。
子ページはありません
人気ページ
- 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・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09