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.
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;
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;
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
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".
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.