J'ai des colonnes sans clé primaire et je veux ajouter une colonne de clé primaire .
NAME Age
-------------
Peter 45
Bob 25
John 56
Peter 45
Certains collègues suggèrent d'ajouter un PK avec une séquence et des déclencheurs: Ajouter une clé primaire d'incrémentation automatique à la table existante dans Oracle
C'est bien, mais mes clients utilisent un utilisateur de base de données sans droit d'ajouter des séquences ou des déclencheurs. Je souhaite éviter de contacter des dizaines d'administrateurs DBA pour modifier les droits des utilisateurs ou exécuter mes scripts.
Voici ma suggestion d'ajouter un PK avec seulement une déclaration de mise à jour: (j'ai besoin d'aide à l'étape 2)
Étape 1: Créez la colonne ID ( J'ai des droits DB pour cela)
ALTER TABLE PERSON ADD ID NUMBER(10,0);
Étape 2: Question: Puis-je initialiser la colonne ID avec des valeurs uniques basées sur l'ordre des lignes ou autre chose? Comment?
UPDATE PERSON SET ID = something-unique
Étape 3: Ajoutez les mots clés contraint de la clé primaire: ( I DB en ai les droits)
ALTER TABLE PERSON ADD CONSTRAINT PK_ID PRIMARY KEY(ID);
Étape 4: Afterwords: la clé primaire est gérée et ajoutée par mon application.
Ce sera le résultat:
ID(PK) NAME Age
---------------------
1 Peter 45
2 Bob 25
3 John 56
4 Peter 45
Merci les amis!
Update person set id = rownum;
Cette idée est très enfantine, mais devrait fonctionner correctement si votre table n'a pas une grande quantité de lignes.
Pour l'étape 2, exécutez une boucle for comme:
declare
i pls_integer :=1;
begin
for rec in (select name,age, rowid from table_name)
loop
update table_name set id = i
where
table_name.name=rec.name
and table_name.age=rec.age
and table_name.rowid = rec.rowid;
i:=i+1;
end loop;
end;