2009-10-31 69 views
1

我有Oracle中的表A,它有一個主鍵(id)。我需要將數據插入到此表中。如何在使用Oracle的插入查詢中防止重複的行?

如何防止重複行?

+0

目前尚不清楚你正在嘗試做什麼。如果你想知道如何填寫id列,你應該使用一個序列。 – pgb 2009-10-31 18:19:39

+0

你需要更具體。如下所示:「這是查詢(簡化),我試圖提交但它會生成重複行[查詢]」 – mga 2009-10-31 18:21:48

回答

5

如果id列被標記爲PK您將無法插入重複密鑰,則服務器將引發異常。

如果您將使用不同的鍵插入重複的數據 - 這是您需要處理的邏輯(如對實際數據設置唯一約束)或在插入之前執行檢查。

0

首先,您將在該表上創建一個具有序列的唯一標識。然後,當你插入到該表中插入語句,你可以使用:

tableName_sn.nextval 

在一份聲明中,如:

inserti into tableName (id) values (tableName_sn.nextval) 

獲得序列中的下一個唯一密鑰。那麼如果你使用這個鍵,你會保證它是唯一的。然而,要注意的是,如果有人剛剛輸入了一個不使用nextval函數的密鑰,您將獲得主鍵違規。

1

如果你的意思是你必須是相同的(除了主鍵)行,你想知道如何刪除它們然後執行:

select col2, col3, ...coln, min(id) from A 
group by col2, col3, ...coln 

(即選擇所有列除了ID。 )

要獲得唯一實例做

delete from A where id not in 
(select min(id) from A 
group by col2, col3, ...coln) as x 

刪除除了獨特的情況下(即重複的)所有行。