【问题标题】:Error 'inserted value too large for column' while altering a table to add default value更改表以添加默认值时出现错误“插入的值对于列而言太大”
【发布时间】:2018-07-10 09:58:35
【问题描述】:

我正在尝试使用以下命令更改表以在表 (Oracle 11g) 中添加列 REFERENCE_NO (VARCHAR2(40)) 的默认值:

ALTER TABLE TABLE_NAME  MODIFY REFERENCE_NO DEFAULT (TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE,'YYDDD')))||'IW'||LPAD(TO_CHAR("SEQ_CG_IW_REF_NO"."NEXTVAL"),9,'0'));

当我执行上述语句时,我收到以下错误:“ORA-01401:插入的值对于列来说太大”。但是,无论序列结果如何,由于 LPAD 和 REFERENCE_NO 是 VARCHAR2(40) 类型,该值应该最大为 16 个字符长度。

但是,当我使用以下语句进行查询时:

select (TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE,'YYDDD')))||'IW'||LPAD(TO_CHAR("SEQ_CG_IW_REF_NO"."NEXTVAL"),9,'0'))from dual;

查询的结果是“18031IW000010008”,长度也是 16 个字符。因此,即使默认值的长度为 16 且列长度为 40,我也无法找到 alter 命令失败的原因。提前致谢 `

【问题讨论】:

    标签: sql oracle ddl


    【解决方案1】:

    默认情况下,VARCHAR2(35) 是 VARCHAR2(35 BYTE) 而不是 VARCHAR2(35 CHAR)。

    此定义意味着该列具有字节长度语义,即最大长度为 35 个字节。

    在多字节字符集中,这不太合适,因为 35 字符的列可能有几倍的字节数。

    浏览下面的文章, https://community.oracle.com/thread/3730347?start=0&tstart=0

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      相关资源
      最近更新 更多