2011-03-05 71 views
1
INSERT INTO SS_ALERT_EVENTS ( ALERT_ID, EVENT_ID, TIME_DURATION, ALERT_EVENT_EFFECT, DATASET_ASSIGN_RULE, KEY_FIELDS_ASSIGN_RULE, SIDE, ALERT_VALIDATION_RULE, UNIQUE_ID) VALUES ('test1', 7 , 0, 1 , NULL, '5b414c4552545f494e535452554d454e542e496e737472756d656e742049445d203a3d205b54524144455f5245504f52542e496e737472756d656e742049445d3b', -1, '5b414c4552542e416374696f6e5d203a3d20313b', 1) 
* 
ERROR at line 1: 
ORA-00001: unique constraint (ESV31SURV.PK_SS_ALERT_EVENTS) violated 

EVENT_ID字段是问题。但我仍想插入它。但是,当我试图放弃该名称的约束时,它说没有这样的约束。此外,USER_CONSTRAINTS表中不显示这样的约束。我该怎么办?Oracle插入时的唯一约束错误

+0

如果你没有看到一个对象,它并不意味着它不存在 - 它只是意味着它是从另一个模式创建的。以sys身份登录并再次查看约束列表。 – zerkms 2011-03-05 12:46:08

回答

3

唯一的约束可能实际上是一个主键约束 - 至少这就是名字所暗示的。

删除表的主键可能会产生非常不好的副作用,它可能会破坏依赖此主键的应用程序(并且还必须删除引用该表的所有外键,然后才能删除主键)

该主键是为了创建目的而创建的,所以在盲目删除它之前,应该咨询创建该模式的人并确保不需要主键(或者应该重新定义)。

说了这一切:尝试使用

 
ALTER TABLE SS_ALERT_EVENTS 
    DROP PRIMARY KEY 

下降的PK,但请仔细检查,如果这真的是一个明智的决定!

+0

“唯一的约束实际上是一个主键约束 - 至少这就是名字的含义。”---错误的。再看一遍查询。它不是主键,它是一个常规的**唯一约束**。 – zerkms 2011-03-05 13:22:16

+4

@zerkms:主键**是一个唯一的约束。违反PK约束会抛出ORA-0001,就像违反“常规”唯一约束一样。试试看,两者都会给你完全相同的错误 – 2011-03-05 13:30:50

+0

对不起,我需要眼镜:-(由于某种未知的原因,我第一次没有看到约束名称为'ESV31SURV.PK_SS_ALERT_EVENTS'包含'PK'前缀。对不起。+1 – zerkms 2011-03-05 13:35:08