2012-01-17 95 views
5

我收到一個我無法理解的錯誤。錯誤是非常簡單的:引用一個似乎不存在的約束的Oracle唯一約束違規

ORA-00001: unique constraint (*schema*.*xyz_constraint*) violated 

但是,什麼導致我的困惑是事實上,沒有這樣的約束似乎存在。這當然沒有在桌面上定義;所討論的數據庫幾乎沒有定義完整的參照完整性,而我插入數據的特定表沒有定義鍵。

對於它的價值,我不能在任何地方在數據庫中找到約束:

select * 
    from all_constraints 
    where constraint_name like '%xyz_constraint%' 

有什麼我俯瞰?謝謝。

+6

嘗試尋找它再次當試圖這樣一個獨特的** **指數將有一個重複的,Oracle將作爲一個獨特的** **約束違規報告。所以我會建議尋找唯一的索引,除了約束。 – 2012-01-17 05:56:30

回答

4

當約束屬於另一個用戶並且您沒有權限時會發生這種情況。

現在從SYS角度

+0

我將不得不聘請一名DBA。自然,我沒有SYS訪問模式。看看有什麼問題會很有趣,因爲這已經在兩年多的時間裏沒有約束問題了。今天我得到了600個錯誤。感謝您的反饋;我會讓你知道我找到了什麼。 – Ickster 2012-01-17 03:03:02

+0

@Ickster:我不記得原因,但我有完全相同的行爲,這是我說的;-)無論如何,在你的研究中祝你好運,並期待詳細信息它的實際情況 – zerkms 2012-01-17 03:07:42

+2

只需查詢而不是'DBA_CONSTRAINTS'。如果你有權訪問這個視圖,那麼如果約束存在,它就會在那裏。 'SYS'不一定是必需的 - 'SYSTEM'也可以訪問它。 – 2012-01-17 03:10:58

1

模式對象名稱幾乎總是以大寫形式存儲。嘗試

select * 
from all_constraints 
where constraint_name like '%XYZ_CONSTRAINT%' 

ORA-00001通常會發生重複的主鍵。你確定你沒有桌子嗎?

+0

我運行的實際查詢包含的約束名稱與我在收到的錯誤中返回的約束名稱完全相同。我很積極,沒有定義在桌子上的鑰匙。唯一的約束是幾個字段上的NOT NULL聲明。 – Ickster 2012-01-17 03:01:11