You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用dbms_metadata.get_ddl获取Oracle表的精简DDL,去除冗余额外信息

Oracle过滤DBMS_METADATA返回的冗余DDL参数方法

你可以通过调整DBMS_METADATA包的会话转换参数,过滤不需要的附加内容,仅保留核心表结构、约束定义:

操作步骤

1. 执行会话参数配置

在执行DDL查询前,先运行以下语句调整输出规则:

-- 移除SCHEMA前缀
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SCHEMA', FALSE);
-- 移除段属性(包含PCTFREE、PCTUSED、压缩、日志等配置)
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SEGMENT_ATTRIBUTES', FALSE);
-- 移除存储参数
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'STORAGE', FALSE);
-- 移除表空间配置
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'TABLESPACE', FALSE);
-- 移除主键约束关联的索引物理参数
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'CONSTRAINT_USE_DEFAULT_INDEX', FALSE);
-- 可选:自动添加SQL结束分号
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE);

2. 执行原DDL查询

select dbms_metadata.get_ddl('TABLE', 'EMP') from dual;

输出效果

调整后返回的核心DDL如下:

CREATE TABLE "EMP"
(    "EMPNO" NUMBER(4,0),
     "ENAME" VARCHAR2(10),
     "JOB" VARCHAR2(9),
     "MGR" NUMBER(4,0),
     "HIREDATE" DATE,
     "SAL" NUMBER(7,2),
     "COMM" NUMBER(7,2),
     "DEPTNO" NUMBER(2,0),
      CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") ENABLE,
      CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
       REFERENCES "DEPT" ("DEPTNO") ENABLE
);

恢复默认配置

如果需要恢复完整DDL输出,执行以下语句即可。以上所有配置均为会话级,断开连接后自动失效,不会影响其他用户操作:

EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'DEFAULT');

内容的提问来源于stack exchange,提问作者Hoopoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:27:00