Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle 12c:Wie kann ich eine vorhandene Primärschlüsselspalte in eine Identitätsspalte ändern?

Sie können eine vorhandene Spalte nicht in eine echte Identitätsspalte umwandeln, aber Sie können ein ähnliches Verhalten erzielen, indem Sie eine Sequenz als Standard für die Spalte verwenden.

create sequence seq_tmp_identity_id
  start with 4
  increment by 1;

Verwenden Sie dann:

alter table tmp_identity 
   modify id 
   default seq_tmp_identity_id.nextval;

damit die Spalte die Sequenz als Standardwert verwendet. Wenn Sie möchten, können Sie default on null verwenden um eine explizite null zu überschreiben Wert, der während des Einfügens bereitgestellt wird (dies ist so nah wie möglich an einer Identitätsspalte)

Wenn Sie ein echtes wollen Identitätsspalte müssen Sie die aktuelle id löschen -Spalte und fügen Sie sie dann erneut als Identitätsspalte hinzu:

alter table tmp_identity drop column id;

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

Beachten Sie, dass Sie start with 4 nicht hinzufügen sollten in diesem Fall, damit alle Zeilen eine neue eindeutige Nummer erhalten