Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle 12c:come posso modificare una colonna di chiave primaria esistente in una colonna di identità?

Non puoi trasformare una colonna esistente in una colonna identità reale, ma puoi ottenere un comportamento simile usando una sequenza come impostazione predefinita per la colonna.

create sequence seq_tmp_identity_id
  start with 4
  increment by 1;

Quindi usa:

alter table tmp_identity 
   modify id 
   default seq_tmp_identity_id.nextval;

per fare in modo che la colonna utilizzi la sequenza come valore predefinito. Se vuoi puoi usare default on null per sovrascrivere un esplicito null valore fornito durante l'inserimento (questo è il più vicino possibile a una colonna di identità)

Se vuoi un vero colonna identità dovrai eliminare l'attuale id colonna e quindi aggiungerla nuovamente come colonna identità:

alter table tmp_identity drop column id;

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

Nota che non dovresti aggiungere start with 4 in questo caso in modo che tutte le righe ottengano un nuovo numero univoco