Aggiungi una chiave primaria di incremento automatico alla tabella esistente in oracle

Voglio aggiungere una nuova colonna primaria di incremento automatico a una tabella esistente con dati. Come lo faccio?

Prima ho aggiunto una colonna e poi ho provato ad aggiungere una sequenza, ho perso come inserire e rendere quella colonna come chiave primaria.

Supponi che la tua tabella sia chiamata t1 e che la tua chiave primaria sia chiamata id
Innanzitutto, crea la sequenza:

 create sequence t1_seq start with 1 increment by 1 nomaxvalue; 

Quindi creare un trigger che si incrementa all’inserimento:

 create trigger t1_trigger before insert on t1 for each row begin select t1_seq.nextval into :new.id from dual; end; 

Se hai la colonna e la sequenza, devi prima compilare una nuova chiave per tutte le righe esistenti. Supponendo che non ti interessa quale chiave è assegnata a quale riga

 UPDATE table_name SET new_pk_column = sequence_name.nextval; 

Una volta fatto, è ansible creare il vincolo della chiave primaria (ciò presuppone che non vi sia alcun vincolo di chiave primaria esistente o che sia già stato eliminato il vincolo di chiave primaria esistente)

 ALTER TABLE table_name ADD CONSTRAINT pk_table_name PRIMARY KEY( new_pk_column ) 

Se si desidera generare automaticamente la chiave, è necessario aggiungere un trigger

 CREATE TRIGGER trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN :new.new_pk_column := sequence_name.nextval; END; 

Se si utilizza una versione precedente di Oracle, la syntax è un po ‘più ingombrante

 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; 

Incastrato dai forum di Oracle OTN

Usa alter table per aggiungere una colonna, ad esempio:

 alter table tableName add(columnName NUMBER); 

Quindi creare una sequenza:

 CREATE SEQUENCE SEQ_ID START WITH 1 INCREMENT BY 1 MAXVALUE 99999999 MINVALUE 1 NOCYCLE; 

e, utilizzare l’ update per inserire valori in colonne come questo

 UPDATE tableName SET columnName = seq_test_id.NEXTVAL 

È ansible utilizzare Oracle Data Modeler per creare chiavi surrogate con incremento automatico.

Passaggio 1. – Creare un diagramma relazionale

È ansible creare prima un diagramma logico e un ingegnere per creare il diagramma relazionale oppure è ansible creare immediatamente il diagramma relazionale.

Aggiungere l’ quadro (tabella) necessaria per avere PK auto incrementato, selezionare il tipo di PK come intero.

Passaggio 2. – Modifica proprietà colonna PK

Ottieni le proprietà della colonna PK. È ansible fare doppio clic sul nome della colonna o fare clic sul pulsante “Proprietà”.

Viene visualizzata la finestra di dialogo Proprietà colonna.

Seleziona la scheda Generale (Selezione predefinita per la prima volta). Quindi seleziona le caselle di controllo “Incremento automatico” e “Colonna id quadro”.

Passaggio 3. – Informazioni aggiuntive

Ulteriori informazioni relative all’incremento automatico possono essere specificate selezionando la scheda “Incremento automatico”.

  • Iniziare con
  • Incremento di
  • Valore minimo
  • Valore massimo
  • Ciclo
  • Disabilitare la cache
  • Ordine
  • Nome sequenza
  • Nome trigger
  • Genera Trigger

Di solito è una buona idea menzionare il nome della sequenza, in modo che sia utile in PL / SQL.

Fare clic su OK (Applica) alla finestra di dialogo Proprietà colonna.

Fare clic su OK (Applica) nella finestra di dialogo Proprietà tabella.

La tabella appare nel diagramma relazionale.