首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 綜合知識

DB2 一鍵查詢當前使用者所有表、欄位、索引、主鍵、註解完整資訊

     編輯:DB2 綜合知識

前言

開發/運維時常需快速掌握某 Schema 下所有表的完整結構定義。本文提供單一 SQL 查詢,整合 SYSCAT.COLUMNS、SYSCAT.TABLES、SYSCAT.INDEXES、SYSCAT.KEYCOLUSE 等系統目錄,一次輸出:表名、表註解、欄位名、資料型別、長度、精度、是否可空、是否自增、欄位註解、是否唯一索引、是否主鍵、索引名稱。

完整查詢 SQL

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
nullable1=可空, 0=NOT NULLSYSCAT.COLUMNS.NULLS
is_identity1=自增欄位 (GENERATED AS IDENTITY)SYSCAT.COLUMNS.IDENTITY
col_remarks欄位註解 (COMMENT ON COLUMN)SYSCAT.COLUMNS.REMARKS
is_pk1=主鍵欄位 (COLSEQ=1 代表主鍵第一欄)SYSCAT.KEYCOLUSE
index_name所屬唯一/主鍵索引名稱SYSCAT.INDEXES.INDNAME
is_unique1=唯一索引或主鍵索引SYSCAT.INDEXES.UNIQUERULE

進階擴充:輸出 DDL

若需直接產生 CREATE TABLE DDL,可使用 db2look:

db2look -d mydb -z MYSCHEMA -e -o ddl.sql
  • -z:指定 Schema。
  • -e:包含 DROP 陳述式。
  • -o:輸出檔案。

結語

將上述 SQL 存為視圖或常用腳本,即可隨時一鍵取得完整結構文件,支援程式碼審查、影響分析、異構遷移對照等作業。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved