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插入,也会发生同样的错误。
答案 0 :(得分:0)
您的问题是,当您在列定义中使用IDENTITY时,您应该考虑其限制。
如果要将行作为子查询插入,则会遇到以下限制:CREATE TABLE AS SELECT不会继承列(source)上的标识属性。您的插入会发生相同的情况,IDENTITY唯一无法正常工作。
insert into autos
(owner_name)
select owner_name
from autos;