Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle 12c :Comment puis-je modifier une colonne de clé primaire existante en une colonne d'identité ?

Vous ne pouvez pas transformer une colonne existante en une véritable colonne d'identité, mais vous pouvez obtenir un comportement similaire en utilisant une séquence comme valeur par défaut pour la colonne.

create sequence seq_tmp_identity_id
  start with 4
  increment by 1;

Utilisez ensuite :

alter table tmp_identity 
   modify id 
   default seq_tmp_identity_id.nextval;

pour que la colonne utilise la séquence comme valeur par défaut. Si vous le souhaitez, vous pouvez utiliser default on null pour écraser un null explicite valeur fournie lors de l'insertion (c'est aussi proche que possible d'une colonne d'identité)

Si vous voulez un vrai colonne d'identité, vous devrez supprimer le id actuel colonne, puis rajoutez-la en tant que colonne d'identité :

alter table tmp_identity drop column id;

alter table tmp_identity 
     add id number(38) 
     generated always as identity;

Notez que vous ne devez pas ajouter le start with 4 dans ce cas pour que toutes les lignes obtiennent un nouveau numéro unique