ADD COLUMN e DROP COLUMN

Quando si aggiunge una nuova colonna ad una tabelle la constraint NOT NULL può essere applicata solo se la tabella non contiene dati.

ALTER TABLE nome_tabella ADD nome_colonna tipo_colonna NOT NULL;

Se la tabella contiene dati, occorre aggiungere un valore di default.

ALTER TABLE nome_tabella ADD nome_colonna tipo_colonna DEFUALT valore NOT NULL;

Se la colonna già esiste e si vuole aggiungere la constraint NOT NULL eseguire l'istruzione (in Line)

ALTER TABLE nome_tabella MODIFY nome_colonna NOT NULL;
opppure

ALTER TABLE nome_tabella MODIFY nome_colonna CONSTRAINT nome_constraint NOT NULL;

Il comando seguente invece termina in errore perché è come una dichiarazione out of Line.
ALTER TABLE nome_tabella ADD NOT NULL (nome_colonna);


Il comando Drop Column richiede alcuni minuti ad Oracle per esaminare ogni riga e per cancellare fisicamente la colonna.
Conviene  eseguire il comando DROP in un secondo momento, in un periodo di bassa attività del database.

S i n t a s s i
ALTER TABLE nome_tabella DROP COLUMN nome_colonna;
ALTER TABLE nome_tabella DROP (nome_colonna);
ALTER TABLE nome_tabella DROP (nome_colonna_1, ... ,nome_colonna_n);

R e g o l e
  • Vengono droppate anche le constraints e gli indici definiti sulla colonna;
  • La colonna non può essere più recuperata anche se si esegue l'istruzione Rollback;
  • Non è possibile eseguire il drop di tutte le colonne della tabella ma la tabella deve contenere almeno una colonna; 
  • Se su due colonne è definita una primary key non è possibile eseguire il drop di una sola colonna, a meno che non venga prima eseguito il drop della constraint o utilizzata la parola chiave Cascade Constraints. 
Infatti Oracle restituisce il seguente messaggio di errore:
Errore SQL: ORA-12991: colonna a cui fa riferimento una restrizione a più colonne
12991. 00000 -  "column is referenced in a multi-column constraint"
*Cause:    An attempt was made to drop a column referenced by some constraints.
*Action:   Drop all constraints referencing the dropped column or
           specify CASCADE CONSTRAINTS in statement.


  • Se una colonna è referenziata da una un foreign key constraint di un altra tabella non è possibile eseguire il drop della colonna, a meno che non si esegua prima il drop della suddetta constraint (definita sull'altra tabella) o venga aggiunta la parola chiave Cascade Constraints. 

Infatti Oracle restituisce il seguente messaggio di errore:
Errore SQL: ORA-12992: impossibile eliminare colonna chiave padre
12992. 00000 -  "cannot drop parent key column"
*Cause:    An attempt was made to drop a parent key column.
*Action:   Drop all constraints referencing the parent key column, or specify CASCADE CONSTRAINTS in statement.

La parola chiave CASCADE CONSTRAINTS oltre ad eseguire il drop delle colonne esegue il drop delle corrispondenti constraint.
S i n t a s s i
ALTER TABLE nome_tabella DROP COLUMN nome_colonna CASCADE CONSTRAINTS;




Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione