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

能否执行DBMS_METADATA.GET_DDL时排除列默认值与虚拟列?

如何在DBMS_METADATA.GET_DDL中排除列默认值和虚拟列?

可以通过设置DBMS_METADATA的会话转换参数实现,具体操作如下:

  1. 禁用默认值输出
    执行以下语句,让GET_DDL不生成列的默认值定义:

    EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'DEFAULT', FALSE);
    
  2. 禁用虚拟列输出
    执行以下语句,让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 as virtual
) ;

调整参数后生成的DDL会移除这两部分内容:

create table "bob"."appointments"
       (
        "appointment_id" number(12,0),
        "appointment_title" varchar2(50 byte)
       ) ;

注意:这些转换参数是会话级别的,仅影响当前会话内的GET_DDL调用,若需恢复默认行为,可将参数值设回TRUE。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:14:55