web-dev-qa-db-fra.com

Ajouter une clé primaire à incrémentation automatique à la table existante dans Oracle

Je souhaite ajouter une nouvelle colonne principale à incrémentation automatique à une table existante contenant des données. Comment je fais ça?

J'ai d'abord ajouté une colonne, puis essayer d'ajouter une séquence après cela. J'ai perdu comment insérer et transformer cette colonne en clé primaire.

65
mallikarjun

Supposons que votre table s'appelle t1 et votre clé primaire s’appelle id
Créez d'abord la séquence:

create sequence t1_seq start with 1 increment by 1 nomaxvalue; 

Créez ensuite un déclencheur qui s'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;
49
alfasin

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

UPDATE table_name
   SET new_pk_column = sequence_name.nextval;

Une fois que cela est fait, vous pouvez créer la contrainte de clé primaire (cela suppose qu’il n’existe aucune contrainte de clé primaire existante ou que vous ayez 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 devez 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 utilisez 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;
28
Justin Cave

Snagged from forums Oracle OTN

Utilisez alter table pour ajouter une colonne, par exemple:

alter table tableName add(columnName NUMBER);

Puis créez 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 celle-ci

UPDATE tableName SET columnName = seq_test_id.NEXTVAL
16
Hermit

Vous pouvez utiliser Oracle Data Modeler pour créer des clés de substitution à incrémentation automatique.

Étape 1. - Créer un diagramme relationnel

Vous pouvez d'abord créer un diagramme logique et Ingénieur pour créer le diagramme relationnel ou vous pouvez créer directement le diagramme relationnel.

Ajoutez l'entité (la table) nécessitant l'incrémentation automatique de la PK, sélectionnez le type de la PK en tant qu'entier.

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

Récupère 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). Cochez ensuite les cases "Incrément automatique" et "Colonne d'identité".

Étape 3. - Informations complémentaires

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

  • Commencer avec
  • Incrémenter de
  • Valeur Min
  • Valeur max
  • Cycle
  • Désactiver le cache
  • Ordre
  • Nom de 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, ce qui sera utile en PL/SQL.

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

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

La table apparaît dans le diagramme relationnel.

5