68 votes

Ajouter une clé primaire auto incrémentée à une table existante dans oracle

Je veux ajouter une nouvelle colonne primaire auto incrémentée à une table existante qui contient des données. Comment dois-je m'y prendre ?

J'ai d'abord ajouté une colonne puis j'ai essayé d'ajouter une séquence après cela, j'ai perdu comment insérer et faire de cette colonne une clé primaire.

50voto

alfasin Points 19063

Supposé que votre table s'appelle t1 et votre clé primaire s'appelle id
Tout d'abord, créez la séquence :

create sequence t1_seq start with 1 increment by 1 nomaxvalue; 

Puis créez un déclencheur qui incrémente lors de l'insertion :

create trigger t1_trigger
before insert on t1
for each row
   begin
     select t1_seq.nextval into :new.id from dual;
   end;

28voto

Justin Cave Points 114578

Si vous avez la colonne et la séquence, vous devez d'abord remplir une nouvelle clé pour toutes les lignes existantes. En supposant que vous ne vous souciez pas de savoir quelle clé est affectée à quelle ligne

UPDATE table_name
   SET new_pk_column = sequence_name.nextval;

Une fois que c'est fait, vous pouvez créer la contrainte de clé primaire (cela suppose qu'il n'y a pas de contrainte de clé primaire existante ou que vous avez déjà supprimé la contrainte de clé primaire existante).

ALTER TABLE table_name
  ADD CONSTRAINT pk_table_name PRIMARY KEY( new_pk_column )

Si vous souhaitez générer la clé automatiquement, vous devrez ajouter un déclencheur

CREATE TRIGGER trigger_name
  BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  :new.new_pk_column := sequence_name.nextval;
END;

Si vous êtes sur une ancienne version d'Oracle, la syntaxe est un peu plus lourde

CREATE TRIGGER trigger_name
  BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  SELECT sequence_name.nextval
    INTO :new.new_pk_column
    FROM dual;
END;

17voto

Hermit Points 147

Tiré de Forums Oracle OTN

Utilisez alter table pour ajouter une colonne, par exemple :

alter table tableName add(columnName NUMBER);

Créez ensuite une séquence :

CREATE SEQUENCE SEQ_ID
START WITH 1
INCREMENT BY 1
MAXVALUE 99999999
MINVALUE 1
NOCYCLE;

et, l'utilisation update pour insérer des valeurs dans une colonne comme ceci

UPDATE tableName SET columnName = seq_test_id.NEXTVAL

5voto

Vous pouvez utiliser le Modélisateur de données Oracle pour créer des clés de substitution à incrémentation automatique.

Étape 1. - Créez un diagramme relationnel

Vous pouvez d'abord créer un Diagramme Logique et Ingénieur pour créer le Diagramme Relationnel ou vous pouvez directement créer le Diagramme Relationnel.

Ajoutez l'entité (table) qui doit avoir un PK auto incrémenté, sélectionnez le type de PK comme Integer.

Étape 2. - Modifier la propriété de la colonne PK

Obtenez les propriétés de la colonne PK. Vous pouvez double-cliquer sur le nom de la colonne ou cliquer sur le bouton "Propriétés".

La boîte de dialogue Propriétés de la colonne apparaît.

Sélectionnez l'onglet Général (sélection par défaut pour la première fois). Ensuite, cochez les cases "Incrément automatique" et "Colonne d'identité".

Étape 3. - Informations complémentaires

Des informations supplémentaires relatives à l'incrément automatique peuvent être spécifiées en sélectionnant l'onglet "Incrément automatique".

  • Commencez par
  • Incrémenter par
  • Valeur minimale
  • Valeur maximale
  • Cycle
  • Désactiver le cache
  • Commandez
  • Nom de la séquence
  • Nom du déclencheur
  • Générer un déclencheur

Il est généralement judicieux de mentionner le nom de la séquence, afin qu'il soit utile dans PL/SQL.

Cliquez sur OK (Appliquer) dans la boîte de dialogue Column Properties.

Cliquez sur OK (Appliquer) dans la boîte de dialogue Propriétés de la table.

La table apparaît dans le diagramme relationnel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X