2011-05-18 73 views
1

我有一個表,其中一個約束已被設置在一個名爲LoginId的字段上。當插入一個新行時,我在與此字段(LoginID)關聯的這個constratint上發生錯誤,聲明以下錯誤。沒有重複,但仍然違反約束的錯誤

插入命令是下面: 類型1與序列

insert into TemplateModule 
(LoginID,MTtype, Startdate TypeId, TypeCase, MsgType, MsgLog, FileName,UserName, CrID, RegionaltypeId) 
values 
(MODS_SEQ.NEXTVAL,3434,2843,2453,2392,435,2390,'pension.txt','rereee',454545,3434); 
Failed with error 

2型無序列的硬編碼值::

insert into TemplateModule 
(LoginID,MTtype, Startdate TypeId, TypeCase, MsgType, MsgLog, FileName,UserName, CrID, RegionaltypeId) 
values 
(3453,3434,2843,2453,2392,435,2390,'pension.txt','rereee',454545,3434) 

我爲交叉檢查什麼duplicates.But多次found.What可能是根本原因

ORA-00001: unique constraint error (LGN_INDEX)violated 
+0

你如何填充你試圖插入該字段的值? – Patrick 2011-05-18 12:46:08

+1

...你如何交叉檢查它? – Mat 2011-05-18 12:47:42

+1

直接原因絕對是兩個具有相同'LoginID'的記錄。根本原因是由於某種原因,您認爲進入該列的內容不是數據庫獲取的內容。那麼,你有什麼記錄/追蹤或你可以接通? – APC 2011-05-18 12:51:25

回答

1

首先,做一個描述在該表上的LGN_INDEX上,以確保您正在查看右欄。 LGN_INDEX是約束+索引還是索引?嘗試重新構建您的索引以確保它沒有損壞。確保您沒有任何其他可能會干擾的限制條件。

其次,執行SELECT MAX(LOGINID) FROM TEMPLATEMODULE並將其與下一個序列值進行比較以確保您的序列未設置爲低於您正在使用的最大ID。

第三,檢查您是否在該表上有觸發器。

如果這些都不起作用,請嘗試僅使用架構重新創建表。交叉加載數據並重試。在該表上可能存在導致該問題的配置設置。 CREATE TABLE MY_TEMP AS SELECT * FROM TEMPLATEMODULE

+0

您提到的第一個和第二個被檢查。第三個是觸發器。爲了創建序列,觸發器被創建。由於觸發器,這可能是問題 – user682571 2011-05-18 13:15:12

+0

這一切都取決於您的觸發器在做什麼。嘗試禁用觸發器(或創建沒有觸發器的表的副本),然後執行INSERT。這將消除一個可能會干擾的邏輯。 – 2011-05-18 13:17:52

+0

我沒有足夠的準備創建表的副本。只有dba可以做到這一點..是否有任何其他選擇,除此之外? – user682571 2011-05-18 13:21:21

1

我遇到了同樣的問題。

插入語句將一個Integer值(不在表中)填充到主鍵列。

問題是與序列綁定的前觸發器。序列的next_val已經存在於表格中。

觸發器觸發,獲取序列號並失敗並出現主鍵違例。

0

我從excel文件導入時遇到同樣的問題。我認爲該文件沒有重複,直到我嘗試刪除excel中的重複。

要找到並刪除Excel中的重複,

  1. 選擇數據。 Ctrl + a應該可以工作。
  2. 點擊Data -> Remove Duplicates
  3. 選擇在你的數據庫中的約束欄,然後單擊OK
  4. Excel中應該刪除基於在上述步驟3中選擇的字段的任何重複的記錄。

您現在應該可以將文件中的記錄導入到數據庫中。