gpt4 book ai didi

ORACLE 12 C,无法删除 DEFAULT ON NULL 列上的 NOT NULL 约束

转载 作者:行者123 更新时间:2023-12-02 09:31:45 25 4
gpt4 key购买 nike

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:无法在 DEFAULT ON NULL 列上删除 NOT NULL 约束

请告诉我,这里出了什么问题?

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

最佳答案

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

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

  insert into autos
(owner_name)
select owner_name
from autos;

关于ORACLE 12 C,无法删除 DEFAULT ON NULL 列上的 NOT NULL 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23154021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com