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

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;

相关推荐
许彰午10 小时前
28-ORA-01110数据文件读取错误
数据库·oracle
凯凯姜10 小时前
MySQL 联合索引设计与索引失效
数据库·mysql
猫咪很可爱11 小时前
Oracle TEMP 表空间不足(ORA-01652)问题分析与优化实践
数据库·oracle
九零HTTP12 小时前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
Data-Miner13 小时前
需要做财务数据分析,有什么好用的工具?从准备到出报告的实操指南
大数据·数据库·数据分析
袋鼠云数栈13 小时前
让 SQL 解析不再重复造轮子:SqlParserX 正式开源
数据库·人工智能·sql·开源·数据治理
这个DBA有点耶14 小时前
期货 CTP 系统 Oracle RAC 迁移国产库实战:读写分离架构设计与性能对标
数据库·架构·dba
数据库安全14 小时前
AI数据访问安全 |如何控制AI访问权限,防止越权
数据库·安全
这个DBA有点耶14 小时前
Redo Log循环写与checkpoint推进:长事务阻塞下的Checkpoint风暴完整链路
数据库·mysql·代码规范
jnrjian15 小时前
pg_waldump --key-file-name status 查看wal 产生的db
数据库