我已被分配到具有兩個表的應用程序,我們稱它們爲MY_TABLE_ONE
和MY_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的重複數據不被插入,由於約束 – 2012-03-06 20:55:21
@SamHolder但我從拉' MY_TABLE_ONE'。我正在尋找那些在嘗試將它們插入到'MY_TABLE_TWO'時拋出錯誤的重複項。 2或更多的計數將顯示違反行的限制條件。 – 2012-03-06 20:57:24
如果只有Oracle在錯誤信息中說「像違反唯一索引約束」這樣的話。 – 2016-07-27 22:04:00