Nelle precedenti lezioni abbiamo esaminato i comandi per la creazione di tabelle, per l'inserimento di dati nelle tabelle e per le interrogazioni (query). Inoltre abbiamo imparato ad interpretare la struttura di una tabella (ottenuta con DESCRIBE
), data da un insieme di colonne, ognuna con un suo datatype.
Nel corso di questa lezione vedremo come modificare la struttura di una tabella già esistente nel database, in particolar modo l'aggiunta di una o più colonne, la modifica del datatype di colonna o l'eliminazione di una colonna non più necessaria.
Aggiungere una colonna
Può accadere che, dopo aver creato una tabella, abbiamo la necessità di aggiungervi una o più colonne. Se la tabella in questione è vuota, l'utente proprietario potrebbe decidere di eliminarla definitivamente e ricrearla daccapo con l'aggiunta della colonna desiderata.
Questa potrebbe essere una soluzione valida ma "inaccettabile" per un amministratore di database, soprattutto quando all'interno della tabella ci sono dati importanti che non vogliamo assolutamente perdere. Allora come procediamo? Ricorriamo al comando ALTER TABLE
e alla sua clausola ADD
.
Sintassi di ALTER TABLE con ADD
ALTER TABLE <schema>.<tabella> ADD <colonna> <datatype>;
Possiamo anche modificare la struttura di una tabella appartenente ad un altro utente: è innanzitutto obbligatorio possedere il corretto privilegio (privilegio ALTER
), quindi dobbiamo specificare lo schema di appartenenza della tabella.
Creando una tabella con il comando CREATE TABLE
, abbiamo fatto molta attenzione all'ordine di elencazione delle colonne. Successivamente, abbiamo rispettato il medesimo ordine nella fase di inserimento dei dati in tabella (INSERT INTO
).
L'aggiunta di una nuova colonna, ora, pone la stessa in coda alle altre già presenti. Se la tabella contiene già alcune righe, queste conterranno il valore NULL
nella nuova colonna aggiunta. Specificando anche la clausola DEFAULT
nella dichiarazione della nuova colonna, allora tutte le eventuali righe presenti in tabella conterranno il valore di default per la nuova colonna.
Per esempio visualizziamo con DESCRIBE
la struttura della tabella impiegati.
SQL> DESC impiegati
Aggiungiamo alla tabella impiegati una nuova colonna, denominata "Indirizzo", di tipo VARCHAR2(30)
.
SQL> ALTER TABLE impiegati ADD Indirizzo VARCHAR2(30);
Controlliamo la nuova struttura.
La struttura della tabella contiene in coda la nuova colonna aggiunta.
Possiamo aggiungere anche più di una colonna con un unico comando ALTER TABLE.
Sintassi di ALTER TABLE per aggiungere più di una colonna
ALTER TABLE <schema>.<tabella>
ADD (<nome colonna> <datatype>,
<nome colonna> <datatype>,
<nome colonna> <datatype>);
Modificare una colonna
Può capitare anche di dover modificare le impostazioni di colonna per una tabella che abbiamo creato in precedenza. Può accadere, ad esempio, di aver impostato per una colonna una capacità di memorizzazione troppo piccola e di doverla aumentare al fine di memorizzare i dati voluti. A tale scopo usiamo il comando ALTER TABLE
accompagnato dalla clausola MODIFY
.
Sintassi di ALTER TABLE con MODIFY
ALTER TABLE <schema>.>tabella> MODIFY <colonna> <nuovi attributi>;
Per modificare le impostazioni di colonna di una tabella appartenente ad un altro utente valgono le stesse regole già viste per l'aggiunta di colonne. Anche qui è possibile agire su più colonne con un unico comando ALTER TABLE
.
Sintassi di ALTER TABLE per modificare più colonne
ALTER TABLE <schema>.<tabella>
MODIFY (<nome colonna> <nuovi attributi>,
<nome colonna> <nuovi attributi>,
<nome colonna> <nuovi attributi>;
Ad esempio, modifichiamo la colonna "Email" della tabella contatti, attualmente di tipo VARCHAR2 (25)
. Aumenteremo la larghezza di colonna di cinque caratteri ridefinendola VARCHAR2 (30)
.
SQL> ALTER TABLE contatti MODIFY Email VARCHAR2 (30); SQL> DESC contatti
Come possiamo vedere dal risultato del comando DESCRIBE
la colonna "Email" è ora dimensionata a trenta caratteri. Se durante la modifica di una colonna non specifichiamo un suo attributo, come il datatype o il valore di default, questo rimane invariato.
Se aggiungiamo un valore di default ad una colonna già esistente, questo non sarebbe assegnato per le righe già presenti in tabella, ma solamente per le nuove righe inserite successivamente.
Per esempio, nelle lezioni precedenti abbiamo creato una tabella "impiegati" con il campo "Paese_Residenza" di tipo VARCHAR2 (40)
e gli abbiamo assegnato il valore di default 'ROMA'
, modifichiamo il valore di default per la questa colonna da 'ROMA'
a 'MILANO'
.
SQL> ALTER TABLE impiegati MODIFY Paese_Residenza DEFAULT 'MILANO';
Nota: Possiamo tranquillamente aumentare senza incorrere in errori Oracle la dimensione di un datatype VARCHAR2
o la precisione di un datatype NUMBER
. Diversamente, se dovessimo diminuire queste dimensioni è necessario che i dati già presenti in tabella "entrino" completamente nella nuova dimensione di colonna scelta.
Cancellazione di una colonna
Quando una colonna non è più necessaria possiamo liberare lo spazio di memoria da essa occupato con il comando ALTER TABLE
seguito dalla clausola DROP COLUMN
.
Per esempio aggiungiamo una nuova colonna alla tabella impiegati e successivamente procediamo alla sua cancellazione.
SQL> ALTER TABLE impiegati ADD nuova_colonna VARCHAR2(20); SQL> DESC impiegati
SQL> ALTER TABLE impiegati DROP COLUMN nuova_colonna; SQL> DESC impiegati
Come abbiamo già visto per l'aggiunta e la modifica delle impostazioni di una colonna, possiamo anche cancellare contemporaneamente più colonne con un solo comando ALTER TABLE
.
Nota: Se è stato costruito un indice sulla colonna da cancellare allora questo sarà cancellato automaticamente senza alcun intervento da parte nostra.
Un'alternativa alla cancellazione di una colonna è renderla temporaneamente inutilizzabile e di cancellarla in un secondo momento usando la clausola SET UNUSED COLUMN
.
Sintassi di ALTER TABLE per disabilitare una colonna
ALTER TABLE <schema>.<tabella> SET UNUSED COLUMN <colonna>;
Una volta che resa inutilizzabile, la colonna non appare più nella struttura della tabella, né nelle query. Quando siamo sicuri della cancellazione, ad esempio quando la tabella non è eccessivamente utilizzata da altri utenti, possiamo anche procedere alla sua cancellazione:
Sintassi di ALTER TABLE per cancellare una colonna disabilitata
ALTER TABLE <schema>.<tabella> DROP UNUSED COLUMNS;
La clausola DROP UNUSED COLUMNS
cancella tutte le colonne che sono state marcate precedentemente come non utilizzate con la clausola SET UNUSED COLUMN
. Non è possibile, pertanto, cancellare singolarmente una colonna non utilizzata.