web-dev-qa-db-fra.com

Oracle SQL - Ajouter une clé primaire à la table

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!

11
Dimitri Dewaele
Update person set id = rownum;
26
WW.

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;
1
Arnab Bhagabati