2012-12-13 94 views
0

我試圖使用SQL加載下面的表格。在我Ldirectory表我有SYLIDENTIFIER作爲主鍵的組合,我試圖運行此查詢如何使用複合鍵加載表格

insert into S_User.LDIRECTORY (SY,LIDENTIFIER,ONAME,TELNUMBER) 
select 2013,D.CODE, D.NAME, D_YEAR.PHONE_NUMBER  
from WHS.D WHS.D_YEAR 
where WHS.D.D_KEY=WHS.D_YEAR.D_KEY 

和我收到的錯誤是:

SQL Error ORA-00001 unique constraint violated 

Cause: An UPDATE or INSERT statement attempted to insert a duplicate key. 
      For Trusted Oracle configured in DBMS MAC mode, you may see 
      this message if a duplicate entry exists at a different level. 
Action: Either remove the unique restriction or do not insert the key. 

哪有我解決了這個問題?我認爲在插入期間,它將SY列作爲主鍵本身,但我對該列只有一個相同的值。

+0

你可以顯示你的表創建語句嗎?您可能在'SY'和/或'LIDENTIFIER'(或另一列)上分別定義了一個唯一的約束。或者,或者您的選擇正在爲D.CODE – StevieG

+0

返回重複值謝謝你的幫助 – user1751356

回答

1

錯誤消息應指出違反的唯一約束的名稱。假設所討論的約束是主鍵而不是在表上定義的某個其他唯一約束,並且假定主鍵約束是在您指示的SYLIDENTIFIER的組合上定義的組合約束,這意味着您的查詢正在返回重複行。

您正在運行的查詢將爲SY返回2013的硬編碼值。所以如果D.CODE的結果中有任意兩行相同,那麼您會希望違反約束條件。你確定你期望D.CODE在整個結果集中是唯一的嗎?很難根據對象的名稱來猜測(不知道D可能代表什麼,不知道爲什麼D_YEAR將有PHONE_NUMBER列等),但我傾向於猜測D中的一行可能會映射到D_YEAR中的多行在這種情況下,結果中將有多行具有相同的D.CODE值,因此違反了約束條件。

如果您確信查詢不應返回具有相同D.CODE值的任何兩行,則可以使用DML錯誤日誌記錄將違反約束的行寫入錯誤表,以便分析問題。

+0

感謝賈斯汀的回覆。實際上有一個重複的行導致了這個錯誤。 – user1751356