ORACLE 12 C,不能在DEFAULT ON NULL列上删除NOT NULL约束

时间:2014-04-18 12:20:59

标签: oracle oracle12c

create table autos (
id integer generated by default on null as IDENTITY unique,
owner_name nvarchar2(50)
);

然后我在表中插入几行

insert into autos
(owner_name)
VALUES
('Nick');

insert into autos
(owner_name)
VALUES
('Tommy');

插入2行,然后为了增加行数,我运行此查询

insert into autos
(owner_name)
select owner_name
from autos;

成功运行了多个查询,但在此之后,oracle返回错误:ORA-30667: cannot drop NOT NULL constraint on a DEFAULT ON NULL column

请告诉,这里有什么问题?

P.S。我使用SQL Developer。

更新

如果我在sys数据库连接中尝试以上所有代码,一切正常,但我创建了新用户(这里是我创建新用户的代码)

 CREATE USER C##OTO_USER
 IDENTIFIED BY oto_user_pass;

 GRANT ALL PRIVILEGES TO C##OTO_USER;

然后我创建了与C##OTO_USER的新连接,并且仅在此连接中发生错误。

此外,有时会发生此错误,有时INSERT查询工作正常。

不仅INSERT... SELECT,而且通常INSERT语句也会导致错误。

所以,我认为这是新的用户/连接问题,可能是用户创建代码以上,而不是创建完整的用户?

如果尝试使用SQL * PLUS插入,也会发生同样的错误。

1 个答案:

答案 0 :(得分:0)

您的问题是,当您在列定义中使用IDENTITY时,您应该考虑其限制。

如果要将行作为子查询插入,则会遇到以下限制:CREATE TABLE AS SELECT不会继承列(source)上的标识属性。您的插入会发生相同的情况,IDENTITY唯一无法正常工作。

  insert into autos
(owner_name)
select owner_name
from autos;