达梦数据库导出表结构语句(很好用)(在达梦工具上可执行)

WITH TableData AS (

SELECT

t.TABLE_NAME,

tc.COMMENTS AS TABLE_COMMENT,

c.COLUMN_NAME,

c.DATA_TYPE,

CASE

WHEN c.DATA_TYPE IN ('CHAR', 'VARCHAR')

THEN CAST(c.CHAR_LENGTH AS VARCHAR)

WHEN c.DATA_TYPE IN ('DECIMAL', 'NUMERIC')

THEN CONCAT(CAST(c.DATA_PRECISION AS VARCHAR), ',', CAST(c.DATA_SCALE AS VARCHAR))

ELSE CAST(c.DATA_LENGTH AS VARCHAR)

END AS LENGTH_PRECISION,

cc.COMMENTS AS COLUMN_COMMENT,

c.NULLABLE,

c.COLUMN_ID,

-- 判断是否为主键

CASE

WHEN EXISTS (

SELECT 1

FROM DBA_CONS_COLUMNS pkc

JOIN DBA_CONSTRAINTS pk ON pkc.OWNER = pk.OWNER

AND pkc.CONSTRAINT_NAME = pk.CONSTRAINT_NAME

WHERE pk.CONSTRAINT_TYPE = 'P'

AND pkc.OWNER = c.OWNER

AND pkc.TABLE_NAME = c.TABLE_NAME

AND pkc.COLUMN_NAME = c.COLUMN_NAME

) THEN '✅'

ELSE ''

END AS IS_PRIMARY_KEY

FROM

DBA_TABLES t

LEFT JOIN DBA_TAB_COMMENTS tc ON t.OWNER = tc.OWNER AND t.TABLE_NAME = tc.TABLE_NAME

LEFT JOIN DBA_TAB_COLUMNS c ON t.OWNER = c.OWNER AND t.TABLE_NAME = c.TABLE_NAME

LEFT JOIN DBA_COL_COMMENTS cc ON c.OWNER = cc.OWNER AND c.TABLE_NAME = cc.TABLE_NAME

AND c.COLUMN_NAME = cc.COLUMN_NAME

WHERE

t.OWNER = 'RISK_CLOUD'

)

SELECT

CASE

WHEN ROW_TYPE = 'TABLE_HEADER' THEN '📋 表名: ' || TABLE_NAME ||

CASE WHEN TABLE_COMMENT IS NOT NULL AND TABLE_COMMENT != ''

THEN ' - ' || TABLE_COMMENT

ELSE ''

END

WHEN ROW_TYPE = 'COLUMN_HEADER' THEN ' ├─ 字段结构'

WHEN ROW_TYPE = 'COLUMN_TITLE' THEN ''

WHEN ROW_TYPE = 'COLUMN_DATA' THEN ''

ELSE ''

END AS 表结构信息,

CASE

WHEN ROW_TYPE = 'COLUMN_TITLE' THEN '字段名称'

WHEN ROW_TYPE = 'COLUMN_DATA' THEN COLUMN_NAME

ELSE ''

END AS 字段名称,

CASE

WHEN ROW_TYPE = 'COLUMN_TITLE' THEN '数据类型'

WHEN ROW_TYPE = 'COLUMN_DATA' THEN DATA_TYPE

ELSE ''

END AS 数据类型,

CASE

WHEN ROW_TYPE = 'COLUMN_TITLE' THEN '长度/精度'

WHEN ROW_TYPE = 'COLUMN_DATA' THEN LENGTH_PRECISION

ELSE ''

END AS 长度精度,

CASE

WHEN ROW_TYPE = 'COLUMN_TITLE' THEN '字段注解'

WHEN ROW_TYPE = 'COLUMN_DATA' THEN COALESCE(COLUMN_COMMENT, '')

ELSE ''

END AS 字段注解,

CASE

WHEN ROW_TYPE = 'COLUMN_TITLE' THEN '是否为空'

WHEN ROW_TYPE = 'COLUMN_DATA' THEN CASE NULLABLE WHEN 'Y' THEN '是' ELSE '否' END

ELSE ''

END AS 是否为空,

CASE

WHEN ROW_TYPE = 'COLUMN_TITLE' THEN '主键'

WHEN ROW_TYPE = 'COLUMN_DATA' THEN IS_PRIMARY_KEY

ELSE ''

END AS 是否主键

FROM (

-- 表头行

SELECT 'TABLE_HEADER' AS ROW_TYPE, TABLE_NAME, TABLE_COMMENT,

NULL AS COLUMN_NAME, NULL AS DATA_TYPE, NULL AS LENGTH_PRECISION,

NULL AS COLUMN_COMMENT, NULL AS NULLABLE, NULL AS IS_PRIMARY_KEY,

0 AS SORT_ORDER, 0 AS COLUMN_ID

FROM (SELECT DISTINCT TABLE_NAME, TABLE_COMMENT FROM TableData)

UNION ALL

-- 字段结构标题

SELECT 'COLUMN_HEADER' AS ROW_TYPE, TABLE_NAME, TABLE_COMMENT,

NULL AS COLUMN_NAME, NULL AS DATA_TYPE, NULL AS LENGTH_PRECISION,

NULL AS COLUMN_COMMENT, NULL AS NULLABLE, NULL AS IS_PRIMARY_KEY,

1 AS SORT_ORDER, 0 AS COLUMN_ID

FROM (SELECT DISTINCT TABLE_NAME, TABLE_COMMENT FROM TableData)

UNION ALL

-- 字段标题行

SELECT 'COLUMN_TITLE' AS ROW_TYPE, TABLE_NAME, TABLE_COMMENT,

NULL AS COLUMN_NAME, NULL AS DATA_TYPE, NULL AS LENGTH_PRECISION,

NULL AS COLUMN_COMMENT, NULL AS NULLABLE, NULL AS IS_PRIMARY_KEY,

2 AS SORT_ORDER, 0 AS COLUMN_ID

FROM (SELECT DISTINCT TABLE_NAME, TABLE_COMMENT FROM TableData)

UNION ALL

-- 字段数据行

SELECT 'COLUMN_DATA' AS ROW_TYPE, TABLE_NAME, TABLE_COMMENT,

COLUMN_NAME, DATA_TYPE, LENGTH_PRECISION,

COLUMN_COMMENT, NULLABLE, IS_PRIMARY_KEY,

3 AS SORT_ORDER, COLUMN_ID

FROM TableData

UNION ALL

-- 空行分隔

SELECT 'SPACER' AS ROW_TYPE, TABLE_NAME, TABLE_COMMENT,

NULL AS COLUMN_NAME, NULL AS DATA_TYPE, NULL AS LENGTH_PRECISION,

NULL AS COLUMN_COMMENT, NULL AS NULLABLE, NULL AS IS_PRIMARY_KEY,

4 AS SORT_ORDER, 999 AS COLUMN_ID

FROM (SELECT DISTINCT TABLE_NAME, TABLE_COMMENT FROM TableData)

)

ORDER BY

TABLE_NAME,

SORT_ORDER,

COLUMN_ID;

相关推荐
2301_8000742116 分钟前
mysql DQL
数据库·sql·mysql
西风未眠23 分钟前
ClickHouse数据库引擎引起的数据丢失
数据库·clickhouse·故障
海浪仙人掌30 分钟前
应收账款分析如何操作?应收账款分析有哪些注意事项?
数据库·人工智能
Elastic 中国社区官方博客34 分钟前
在 Elasticsearch 中回填时间序列数据:通过批量 API 加载数月的历史指标数据
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
Horn Still Sounds39 分钟前
Linux网络并发服务器模型与SQLite数据库学习笔记
linux·服务器·数据库
昵称画1 小时前
POC验证怎么设计用例?不走过程的实操要点
大数据·数据库·人工智能·低代码·excel
TDengine (老段)1 小时前
TDengine Catalog 与元数据缓存
大数据·数据库·物联网·缓存·时序数据库·tdengine
CarIise2 小时前
MySQL数据库表关系与多表查询:从表间关系设计到JOIN联表查询
数据库·mysql
网络工程小王2 小时前
【LLM开发实验】FastAPI 学习笔记
数据库·笔记·学习·mysql·fastapi
Aime_Perfect2 小时前
sqlserver always on
服务器·数据库·sqlserver