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

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;

相关推荐
常利兵16 分钟前
Spring项目新姿势:Lambda封装Service调用,告别繁琐注入!
java·数据库·spring
liqianpin11 小时前
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
数据库·mysql
kgduu1 小时前
js之客户端存储
javascript·数据库·oracle
light blue bird1 小时前
原生控件GDI完成作业协同界面
jvm·数据库·.net·winform·gdi+界面
聊点儿技术1 小时前
利用IP归属地查询识别异地登录风险:企业账号安全的技术探索
数据库·tcp/ip·安全
Ricky_Theseus2 小时前
SQL Server 的五种约束类型
数据库·sql·oracle
zjshuster2 小时前
数据库分库分表的方法论与实操
数据库·adb
一只努力的微服务2 小时前
【Calcite 系列】深入理解 Calcite 的 AggregateValuesRule
大数据·数据库·calcite·优化规则
IT邦德2 小时前
Oracle向量数据库实战
数据库·oracle
2401_873544923 小时前
使用Python处理计算机图形学(PIL/Pillow)
jvm·数据库·python