错误'插入的值太大而不适合列'同时更改表以添加默认值

时间:2018-01-31 10:17:31

标签: sql oracle ddl

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

O(n log n)

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

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

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'));

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

1 个答案:

答案 0 :(得分:0)

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

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

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

通过以下文章, https://community.oracle.com/thread/3730347?start=0&tstart=0