能否执行DBMS_METADATA.GET_DDL时排除列默认值与虚拟列?
如何在DBMS_METADATA.GET_DDL中排除列默认值和虚拟列?
可以通过设置DBMS_METADATA的会话转换参数实现,具体操作如下:
禁用默认值输出
执行以下语句,让GET_DDL不生成列的默认值定义:EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'DEFAULT', FALSE);禁用虚拟列输出
执行以下语句,让GET_DDL忽略表中的虚拟列:EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'VIRTUAL_COLUMNS', FALSE);
完整示例
先执行上述参数设置,再运行目标查询:
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'DEFAULT', FALSE); EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'VIRTUAL_COLUMNS', FALSE); SELECT dbms_metadata.get_ddl('TABLE', table_name, 'BOB') FROM user_tables WHERE table_name = 'APPOINTMENTS';
输出结果对比
原DDL包含默认值和虚拟列:
create table "bob"."appointments"
(
"appointment_id" number(12,0) default "bob"."appointment_id"."nextval",
"appointment_title" varchar2(50 byte),
"appointment_priority" number generated always asvirtual
) ;
调整参数后生成的DDL会移除这两部分内容:
create table "bob"."appointments" ( "appointment_id" number(12,0), "appointment_title" varchar2(50 byte) ) ;
注意:这些转换参数是会话级别的,仅影响当前会话内的GET_DDL调用,若需恢复默认行为,可将参数值设回TRUE。
内容的提问来源于stack exchange,提问作者Sam Kolier
相关产品推荐
相关产品推荐

