如何使用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
相关产品推荐
相关产品推荐

