開發/運維時常需快速掌握某 Schema 下所有表的完整結構定義。本文提供單一 SQL 查詢,整合 SYSCAT.COLUMNS、SYSCAT.TABLES、SYSCAT.INDEXES、SYSCAT.KEYCOLUSE 等系統目錄,一次輸出:表名、表註解、欄位名、資料型別、長度、精度、是否可空、是否自增、欄位註解、是否唯一索引、是否主鍵、索引名稱。
SELECT
T.TABNAME AS tb_name,
COALESCE(T.REMARKS, '') AS tb_remarks,
C.COLNAME AS col_name,
C.TYPENAME AS col_type,
C.LENGTH AS col_length,
C.SCALE AS col_scale,
CASE C.NULLS WHEN 'Y' THEN '1' ELSE '0' END AS nullable,
CASE C.IDENTITY WHEN 'Y' THEN '1' ELSE '0' END AS is_identity,
COALESCE(C.REMARKS, '') AS col_remarks,
CASE WHEN K.COLSEQ IS NOT NULL THEN '1' ELSE '0' END AS is_pk,
COALESCE(I.INDNAME, '') AS index_name,
CASE I.UNIQUERULE WHEN 'U' THEN '1' WHEN 'P' THEN '1' ELSE '0' END AS is_unique
FROM SYSCAT.COLUMNS C
INNER JOIN SYSCAT.TABLES T
ON C.TABSCHEMA = T.TABSCHEMA
AND C.TABNAME = T.TABNAME
LEFT JOIN SYSCAT.INDEXES I
ON I.TABSCHEMA = T.TABSCHEMA
AND I.TABNAME = T.TABNAME
AND I.UNIQUERULE IN ('U','P')
LEFT JOIN SYSCAT.KEYCOLUSE K
ON K.TABSCHEMA = T.TABSCHEMA
AND K.TABNAME = T.TABNAME
AND K.COLNAME = C.COLNAME
AND K.COLSEQ = 1
WHERE T.TABSCHEMA = CURRENT SCHEMA
AND T.TYPE = 'T'
AND T.TBSPACEID IN (SELECT TBSPACEID FROM SYSCAT.TABLESPACES WHERE TBSPACE = 'USERSPACE1')
ORDER BY T.TABNAME, C.COLNO;
| 輸出欄位 | 意義 | 來源 |
|---|---|---|
| tb_name | 表名稱 | SYSCAT.TABLES.TABNAME |
| tb_remarks | 表註解 (COMMENT ON TABLE) | SYSCAT.TABLES.REMARKS |
| col_name | 欄位名稱 | SYSCAT.COLUMNS.COLNAME |
| col_type | 資料型別名稱 (VARCHAR, INTEGER...) | SYSCAT.COLUMNS.TYPENAME |
| col_length | 長度 (字元型) / 精度 (數值型) | SYSCAT.COLUMNS.LENGTH |
| col_scale | 小數位數 | SYSCAT.COLUMNS.SCALE |
| nullable | 1=可空, 0=NOT NULL | SYSCAT.COLUMNS.NULLS |
| is_identity | 1=自增欄位 (GENERATED AS IDENTITY) | SYSCAT.COLUMNS.IDENTITY |
| col_remarks | 欄位註解 (COMMENT ON COLUMN) | SYSCAT.COLUMNS.REMARKS |
| is_pk | 1=主鍵欄位 (COLSEQ=1 代表主鍵第一欄) | SYSCAT.KEYCOLUSE |
| index_name | 所屬唯一/主鍵索引名稱 | SYSCAT.INDEXES.INDNAME |
| is_unique | 1=唯一索引或主鍵索引 | SYSCAT.INDEXES.UNIQUERULE |
若需直接產生 CREATE TABLE DDL,可使用 db2look:
db2look -d mydb -z MYSCHEMA -e -o ddl.sql
-z:指定 Schema。-e:包含 DROP 陳述式。-o:輸出檔案。將上述 SQL 存為視圖或常用腳本,即可隨時一鍵取得完整結構文件,支援程式碼審查、影響分析、異構遷移對照等作業。