2008-10-28 4 views
1

J'ai cette table dans un DB Oracle qui a une clé primaire définie sur 3 des colonnes de données. Je souhaite supprimer la contrainte de clé primaire pour autoriser les lignes avec des données en double pour ces colonnes et créer une nouvelle colonne, 'id', pour contenir un ID entier auto-incrémenté pour ces lignes. Je sais comment créer une séquence et déclencher l'ajout d'un ID auto-incrémenté pour les nouvelles lignes ajoutées à la table, mais est-il possible d'écrire une instruction PL/SQL pour ajouter des ID uniques à toutes les lignes déjà présentes dans la table?Affectation d'une valeur d'incrémentation automatique à une nouvelle colonne dans Oracle

Répondre

5

Une fois que vous avez créé la séquence:

update mytable 
set id = mysequence.nextval; 
3

Si vous utilisez simplement un entier pour une séquence, vous pouvez mettre à jour l'ID avec le rownum. par exemple.

update 
table 
set id = rownum 

Vous devez ensuite réinitialiser la séquence à l'ID valide suivant.

2

Est-ce que vous avez besoin?

UPDATE your_table 
    SET id = your_seq.nextval; 

Cela suppose que vous ne vous souciez pas quel ordre vos clés primaires sont.

0

D'abord, vous devez vérifier votre PCTFREE ... est-il assez de place pour chaque ligne pour obtenir plus?

Si vous choisissez un très petit PCTFREE ou que vos données ont beaucoup de mises à jour, vous pouvez commencer à enchaîner chaque ligne pour faire cela comme une mise à jour.

Vous êtes presque certainement mieux de faire cela en tant que CTAS.

Créer la table t2 en sélectionnant seq.nextval, t1. * À partir de t1.

goutte t1

renommage t2 à t1.

Questions connexes