我有一张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个条目,都有一个不同的主键,也不是空的。有人知道这是什么吗?
谢谢你,
彼得
6条答案
按热度按时间xienkqul1#
我的表只包含3个条目,都有一个不同的主键,也不是空的。
你必须原谅我们的怀疑。因为该错误肯定表示重复值。
你需要做的是使用
exceptions
子句。这将显示违反约束的记录的ROWID。您可能需要创建目标表:默认情况下,脚本创建一个名为EXCEPTIONS的表:编辑
你需要弄清楚你的安装代码和你在这里发布的简化代码之间有什么不同。很可能有一个或多个
INSERT
语句在约束不生效时意外执行了不止一次。将EXCEPTIONS INTO
子句添加到代码中可能有助于跟踪它。e1xvtsh32#
从here
原因:您尝试启用主键约束,但主键中的列包含NULL值或重复值。
jxct1oxe3#
违反主要ki的主要原因是你所做的属性是空的,或者你在表中有一些重复的id或属性
例如,在插入值0008 Mukul NYCT NYC 199560 2500之后
0006 Rukmini bombay maharastra 100001 0
0007克里希纳马图拉涨900050 100000
0008 Mukul NYCT NYC 199560 2500
或者您的ID可为空
所以只要修改属性并设置为NOT NULL,就可以删除重复项(如果有的话
然后你就可以将主键添加到client _no
oyjwcjzk4#
两个主键是否相同?
当您尝试在表上创建/启用主键时,通常会引发此错误
ki0zmccv5#
我支持APC的答案,但由于您似乎在实现它时遇到了一些问题,您能否发布此查询的结果:
这将给给予我们(和你)一些有问题的钥匙的想法。
1tuwyuhd6#
可能存在重复值