2012-03-06 70 views
2

我已被分配到具有兩個表的應用程序,我們稱它們爲MY_TABLE_ONEMY_TABLE_TWO。當用戶在表格中輸入數據時,數據輸入MY_TABLE_ONE。這項工作完成後,一個數據庫包被觸發,這實質上執行以下操作:違規的非現有Oracle數據庫約束

DELETE FROM MY_TABLE_TWO; 

INSERT INTO MY_TABLE_TWO 
mto.COLUMN_ONE, 
moto.COLUMN_TWO, 
mott.COLUMN_THREE 
FROM MY_TABLE_ONE mto, MY_OTHER_TABLE_ONE moto, MY_OTHER_TABLE_TWO mott 
WHERE mto.OTHER_TABLE_ONE_UUID = moto.UUID 
AND mto.OTHER_TABLE_TWO_UUID = mott.UUID; 

出於某種原因,這個包就開始因沒有按規定插入用的消息:

ORA-00001: unique constraint 
(MY_SCHEMA.MY_TABLE_TWO_UK01) violated 
ORA-06512: at "MY_SCHEMA.MY_PACKAGE", line 2 
ORA-06512: at line 1 

仰望制約MY_TABLE_TWO,沒有MY_TABLE_TWO_UK01約束。然而,還有一個MY_TABLE_TWO_UK約束條件,要求3個插入列是唯一的。但是,如果我運行下面的查詢:

SELECT mto.COLUMN_ONE, moto.COLUMN_TWO, mott.COLUMN_THREE, COUNT(*) AS COUNTER 
FROM MY_TABLE_ONE mto, MY_OTHER_TABLE_ONE moto, MY_OTHER_TABLE_TWO mott 
WHERE mto.OTHER_TABLE_ONE_UUID = moto.UUID 
AND mto.OTHER_TABLE_TWO_UUID = mott.UUID 
GROUP BY mto.COLUMN_ONE, moto.COLUMN_TWO, mott.COLUMN_THREE 
ORDER BY COUNTER DESC; 

,那麼所有的計數是1。所以它看起來並不像約束被侵犯。

有沒有人知道發生了什麼?我不確定01來自約束名稱。而且我無法找到違反約束的地方。

+1

您 檢查不會告訴你什麼是明顯的計數1的重複數據不被插入,由於約束 – 2012-03-06 20:55:21

+0

@SamHolder但我從拉' MY_TABLE_ONE'。我正在尋找那些在嘗試將它們插入到'MY_TABLE_TWO'時拋出錯誤的重複項。 2或更多的計數將顯示違反行的限制條件。 – 2012-03-06 20:57:24

+0

如果只有Oracle在錯誤信息中說「像違反唯一索引約束」這樣的話。 – 2016-07-27 22:04:00

回答

13

這是一個索引

select * from all_ind_columns where index_name = 'MY_TABLE_TWO_UK01'; 
+0

該索引看起來似乎存在(我使用了Toad UI,而不是你給予的SQL返回的東西)。它似乎連接到其他3列。但是,使用這3列的分組仍然只產生1個計數。任何想法什麼是違反索引? – 2012-03-06 21:09:33

+0

啊,劃傷了。錯過了刪除我的腳本中的一列。謝謝您的幫助。計數腳本現在產生2,表明問題。我會調查。 – 2012-03-06 21:15:03

+0

+1感謝您的幫助。和很酷的名字。我<3 2001. – 2012-03-06 21:15:23