sql >> Database >  >> RDS >> Oracle

Oracle 12c:Hoe kan ik een bestaande primaire-sleutelkolom wijzigen in een identiteitskolom?

U kunt van een bestaande kolom geen echte identiteitskolom maken, maar u kunt een soortgelijk gedrag krijgen door een reeks als standaard voor de kolom te gebruiken.

create sequence seq_tmp_identity_id
  start with 4
  increment by 1;

Gebruik dan:

alter table tmp_identity 
   modify id 
   default seq_tmp_identity_id.nextval;

om de kolom de reeks als standaardwaarde te laten gebruiken. Als je wilt, kun je default on null . gebruiken om een ​​expliciete null te overschrijven waarde opgegeven tijdens het invoegen (dit komt zo dicht mogelijk bij een identiteitskolom)

Als je een echte . wilt identiteitskolom moet u de huidige id . weglaten kolom en voeg het dan opnieuw toe als een identiteitskolom:

alter table tmp_identity drop column id;

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

Merk op dat u de start with 4 . niet moet toevoegen in dit geval zodat alle rijen een nieuw uniek nummer krijgen



  1. Mysql-tabellen converteren van latin1 naar utf8

  2. kan niet te groot html-bestand laden bij het pakken

  3. Hoe waarden ophalen uit een database?

  4. Trace Flag 3226 gebruiken om logboekregistratie van back-ups te onderdrukken