3
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

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

PS我使用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 插入,也会发生同样的错误。

4

1 回答 1

0

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

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

  insert into autos
(owner_name)
select owner_name
from autos;
于 2015-03-13T08:29:30.570 回答