使用dbms_metadata.get_ddl获取表DDL时多余元数据问题求助
如何获取Oracle表的简洁标准DDL语句
通过调整DBMS_METADATA的转换参数,可以过滤掉冗余的元数据信息,生成符合需求的简洁DDL。
具体实现步骤
- 调用
DBMS_METADATA.SET_TRANSFORM_PARAM设置转换规则,去除不必要的属性:SEGMENT_ATTRIBUTES FALSE:移除段属性(如PCTFREE、LOGGING等)STORAGE FALSE:移除存储子句TABLESPACE FALSE:移除表空间指定COLLATION FALSE:移除排序规则相关内容PRETTY FALSE:取消自动格式化,生成紧凑语句SQLTERMINATOR TRUE:自动添加分号结尾
完整PL/SQL示例
SET SERVEROUTPUT ON; DECLARE v_ddl CLOB; BEGIN -- 配置转换参数 DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SEGMENT_ATTRIBUTES', FALSE); DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'STORAGE', FALSE); DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'TABLESPACE', FALSE); DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'COLLATION', FALSE); DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'PRETTY', FALSE); DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE); -- 可选:设置输出为小写 DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'LOWERCASE', TRUE); -- 获取目标表的DDL v_ddl := DBMS_METADATA.GET_DDL('TABLE', 'A_test'); -- 可选:移除BYTE标识和引号 v_ddl := REPLACE(REPLACE(v_ddl, ' BYTE', ''), '"', ''); DBMS_OUTPUT.PUT_LINE(v_ddl); END; /
执行以上代码后,将输出类似如下的简洁DDL:
create table a_test(id number,name varchar2(90),address varchar2(90),gender char(1));
内容的提问来源于stack exchange,提问作者prashant chhetri
相关产品推荐
相关产品推荐

