2011-03-05 33 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