Oracle数据库23ai:出现错误ORA-02264,但我既找不到指定名称的约束,也无法删除一个约束

问题描述 投票:0回答:1

我正在使用 Oracle 数据库 23ai,免费版本,以及 Allround Automations 的 PL/SQL 开发人员。我收到错误

ORA-02264
,虽然我理解它的含义(发现一个已经处于活动状态的同名约束,禁止为两个约束分配相同的名称),但我不明白为什么在我的情况下会出现此错误。

我正在尝试以下代码:

CREATE TABLE nations (
nations_id INTEGER GENERATED BY DEFAULT AS IDENTITY,
name NVARCHAR2(255) NOT NULL,
continent NVARCHAR2(20) NOT NULL,
habitants_at_2024 INTEGER,
capital NVARCHAR2(255) NOT NULL,
CONSTRAINT pk_nations PRIMARY KEY(nations_id),
CONSTRAINT unique_nation_name UNIQUE(name)
);
-- cities
CREATE TABLE cities(
cities_id INTEGER GENERATED BY DEFAULT AS IDENTITY,
name NVARCHAR2(255) NOT NULL,
country NVARCHAR2(255),
CONSTRAINT pk_cities PRIMARY KEY(cities_id),
CONSTRAINT unique_city_name UNIQUE(name),
CONSTRAINT fk_country FOREIGN KEY(country) REFERENCES nations(name)
);
ALTER TABLE nations ADD CONSTRAINT fk_capital FOREIGN KEY(capital) REFERENCES cities(name);

错误信息:

ORA-02264: 名称已被现有约束使用

在线上弹出

ALTER TABLE
语句。

但是,我很确定名称

fk_capital
不应该有另一个限制。为了验证这一点,我按照这个问题

中的建议尝试了以下操作
SELECT *
  FROM all_constraints
 WHERE table_name = UPPER('table_name'); 

该命令工作正常,但我也无法在结果表中找到约束名称。更重要的是,我尝试了以下方法:

ALTER TABLE nations DROP CONSTRAINT fk_capital;
ALTER TABLE nations ADD CONSTRAINT fk_capital FOREIGN KEY(capital) REFERENCES cities(name);

尝试删除约束失败,并显示错误消息

ORA-02443
,这表明不存在名称为
fk_capital
的约束。紧接着,
ORA-02264
再次弹出,再次表明该名称已被使用。我确保没有拼写错误 - 您看到的代码是复制粘贴的。有人可以告诉我哪里出错了吗?

提前感谢所有答案!

PS.:我发现另一篇文章建议我可以使用

找到约束名称
SELECT owner, constraint_type, table_name
from user_constraints
where constraint_name = 'fk_capital';

但在我的例子中,结果表是空的。

sql oracle-database plsql plsqldeveloper
1个回答
0
投票

Oracle 数据字典中的名称以大写形式显示。您应该查询

fk_capital
,而不是查询
FK_CAPITAL

SELECT owner, constraint_type, table_name
FROM   user_constraints
WHERE  constraint_name = 'FK_CAPITAL';
© www.soinside.com 2019 - 2024. All rights reserved.