2008-10-28 69 views
1

我在Oracle數據庫中擁有此表,該數據庫在其中的3個數據列上定義了主鍵。我想刪除主鍵約束以允許具有這些列的重複數據的行,並創建一個新列'id',以包含這些行的自動遞增整數ID。我知道如何創建一個序列並觸發爲添加到表中的新行添加自動遞增ID,但是可以編寫一個PL/SQL語句來爲已經在表中的所有行添加唯一ID嗎?在Oracle中爲新列指定自動遞增值

回答

5

一旦你創建序列:

update mytable 
set id = mysequence.nextval; 
3

如果你只是使用一個整數序列,你可以用rownum更新id。例如

update 
table 
set id = rownum 

然後,您需要將序列復位到下一個有效的ID。

2

這是你需要什麼?

UPDATE your_table 
    SET id = your_seq.nextval; 

這是假設你不在乎什麼爲了你的主鍵英寸

0

首先,你應該檢查你的PCTFREE ...是否有足夠的空間,每行變長?

如果您選擇了一個非常小的PCTFREE或者您的數據有很多長度增加的更新,那麼您可能會開始鏈接每一行以執行更新。

你幾乎肯定會更好地做這個CTAS。

創建表t2作爲select seq.nextval,t1。* from t1。

drop t1

將t2重命名爲t1。