1

我们最近从 Oracle 9.2 版迁移到 11g。但是使用数据库的应用程序出现了一些错误。我们得到以下异常:

ORA-01400: cannot insert null into...

我查找了有关该错误的信息,尤其是有关可能是原因的 11g 版本中的一些新功能的信息。

我在这里。我知道用默认值定义表列的旧方法行不通,但我不知道为什么,更重要的是如何解决这个问题。

这是我可以使用 SQL Developer 看到的表的定义:

COLUMN_NAME         DATA_TYPE       NULLABLE      DATA_DEFAULT   COLUMN_ID
--------------------------------------------------------------------------
...
REP_DOC_RECEIVED    CHAR(1 BYTE)    No            'n'            12 
...

当我尝试为该列插入具有空值的行时,会引发异常。

4

1 回答 1

1

仅当插入语句中未提供任何值时,才应用默认值。所以我猜你的插入会做一些insert into ... values ( ... , NULL, ...)

请参阅例如http://sqlfiddle.com/#!4/cd58c/7以显示差异:

-- ok
insert into a (n,REP_DOC_RECEIVED) values (1,'A');

-- ok, default is applied    
insert into a (n) values (1);

-- not ok, NOT NULL constraint violated    
insert into a (n,REP_DOC_RECEIVED) values (1,'');

您必须NVL(...,'n')在插入语句中执行或忽略该列。不,这在 11g 中没有改变。

于 2012-07-27T05:21:22.220 回答