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

Oracle 11g中DBMS_METADATA.GET_DDL丢失VARCHAR2(4000)列默认值问题

Oracle 11g中VARCHAR2(4000)列默认值丢失的原因

问题场景

在Oracle 11g环境中执行以下操作后,发现VARCHAR2(4000)列的默认值丢失:

  1. 创建包含超长默认值的表:
CREATE TABLE "TEST1"."JWTEST"
(
  C0 NUMBER(38) not null PRIMARY KEY,
  C1 VARCHAR2(4000) DEFAULT 'abcd...(total 4000 characters)...abcd',
  SUPPLEMENTAL LOG DATA (ALL) COLUMNS
);
  1. 通过DBMS_METADATA.GET_DDL获取表的DDL:
SELECT DBMS_METADATA.GET_DDL('TABLE', 'JWTEST', 'TEST1') FROM DUAL;

返回的DDL中C1列的默认值丢失:

CREATE TABLE "TEST1"."jwtest2" 
(    "C0" NUMBER(38,0) NOT NULL ENABLE, 
    "C1" VARCHAR2(4000) DEFAULT , 
     PRIMARY KEY ("C0")
  USING INDEX  ENABLE
);

原因分析

这是Oracle 11g版本中DBMS_METADATA.GET_DDL函数的已知缺陷:

  • 当VARCHAR2列的默认值长度达到该类型在11g中的最大限制(4000字符)时,函数无法正确解析和输出这个超长默认值,导致生成的DDL中默认值部分为空。
  • 补充日志的配置不是直接诱因,但结合超长默认值的场景,触发了该函数的解析异常。

可通过缩短默认值长度(如改为3999字符)验证:此时执行GET_DDL会正常返回完整的默认值定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:52:15