sql - ORA-02437 : cannot validate <name> - primary key violated

标签 sql oracle primary-key

我有一张 table :

CREATE TABLE MY_TABLE (
  MY_ID NUMBER NOT NULL,
  COLUMN_1 NUMBER,
  COLUMN_2 NUMBER
);
ALTER TABLE MY_TABLE ADD CONSTRAINT PK_FOO PRIMARY KEY (MY_ID);

稍后,当执行以下 sql 时,我得到一个错误:

ALTER TABLE MY_TABLE DROP PRIMARY KEY DROP INDEX;
ALTER TABLE MY_TABLE ADD CONSTRAINT PK_FOO PRIMARY KEY (MY_ID) 

ORA-02437: cannot validate PK_FOO - primary key violated

我的表只包含 3 个条目,它们都具有不同的主键,该主键也不为空。 有人知道这可能是什么吗?

谢谢,

彼得

最佳答案

My table only contains 3 entries all with a different primary key which is also not null.

您必须原谅我们的一定程度的怀疑。因为该错误肯定表示重复值。

您需要做的是使用 exceptions 子句。这将向您显示违反您的约束的记录的 ROWID。您可能需要创建目标表:默认情况下,脚本会创建一个名为 EXCEPTIONS 的表:

SQL> ALTER TABLE MY_TABLE ADD CONSTRAINT PK_FOO PRIMARY KEY (MY_ID);
ALTER TABLE MY_TABLE ADD CONSTRAINT PK_FOO PRIMARY KEY (MY_ID)
                                    *
ERROR at line 1:
ORA-02437: cannot validate (APC.PK_FOO) - primary key violated


SQL> @%ORACLE_HOME%\rdbms\admin\utlexpt1.sql

Table created.

SQL> ALTER TABLE MY_TABLE ADD CONSTRAINT PK_FOO PRIMARY KEY (MY_ID)
  2  exceptions into exceptions
  3  /
ALTER TABLE MY_TABLE ADD CONSTRAINT PK_FOO PRIMARY KEY (MY_ID)
                                    *
ERROR at line 1:
ORA-02437: cannot validate (APC.PK_FOO) - primary key violated


SQL> select * from exceptions
  2  /

ROW_ID             OWNER TABLE_NAME CONSTRAINT
------             ----- ---------- ----------
AABQXcAAEAAAXUPAAD APC   MY_TABLE   PK_FOO        
AABQXcAAEAAAXUPAAB APC   MY_TABLE   PK_FOO        

SQL>

编辑

您需要弄清楚您的安装代码与您在此处发布的简化代码有何不同。您可能有一个或多个 INSERT 语句在约束无效时意外执行了多次。将 EXCEPTIONS INTO 子句添加到您的代码中可能会帮助您跟踪它。

关于sql - ORA-02437 : cannot validate <name> - primary key violated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1453892/

相关文章:

sql - 如何在 Postgres 中连接多个表?

sql - 使用带有 where 子句的 ROW_NUMBER() 来获取未过滤表中的行号

mysql - MySQL 中的索引和使用主键作为索引

mysql - 在这个表示住宿服务房价的 SQL 表中设置键的最佳解决方案是什么?

python - 为什么有 2 个不同的输出

SQL:两个没有完整列匹配的表的并集

mysql - Oracle Database Link - MySQL 等价物?

sql - 更新查询的问题

javascript - php 注册类连接前端表单?

sql-server - 使用 CFINSERT 后获取主键 - ColdFusion