2017-03-06 185 views
-1

我最近收到一個我的客戶遇到ORA-00001的情況:唯一約束違反了錯誤。當一個程序試圖截斷兩個表格然後向其中插入數據時發生了這種情況。 從錯誤日誌文件,將truncate步驟完成後, 從INTERNET_GROUP 刪除INTERNET_ITEM唯一約束違反了空表

刪除

但經過這一權利,插入到Internet_group表引發的ORA-00001錯誤。我想知道是否有任何數據庫設置與此錯誤相關?我從來沒有使用Oracle,我想知道是否Oracle使用SELECT語句對行進行了鎖定,在這種情況下,該行被鎖定並且不會被刪除?任何幫助表示讚賞。

+2

truncate!=刪除,但可能不相關。你確定它不只是試圖插入多個衝突行嗎?您插入的數據本身必須是唯一的,當然,與現有數據相比,並非*只是*。你確定刪除沒有回滾 - 在發生這種情況後你有沒有檢查過表中的數據? (可能你有一個腐敗的索引或其他東西,但排除顯而易見的第一個) –

+1

你可以給一個可重複的例子嗎?或者至少涉及DDL/DML? – tbone

+0

是否刪除COMMIT? – BobC

回答

0

請知道截斷和刪除之間的區別。你說你截斷了表,但是你提到了「從...中刪除」。這完全不同。 如果你確定要清空表,嘗試用

truncate table internet_group reuse storage; 

心靈取代你,因爲這被認爲是一個DDL(數據定義語言)語句,而不是一個承諾是沒有必要與截斷聲明DML(數據修改語言)語句,如更新和刪除。

此外,選擇上沒有行鎖定。但是更改僅在數據庫中的其他會話應用並且可見時應用。 我想那是笏發生的;您刪除了記錄但未執行提交(尚未)並隨後插入新記錄。

編輯: 我現在意識到你可能會插入多個記錄.... 另一種選擇可能是,數據本身會導致違規。你能否提供桌上的限制條件?必須有主鍵或唯一約束。您可能想要對照您的數據集。

相關問題