Cancellazione di una vista
Per eliminare una vista usiamo lo statement DROP VIEW
.
Sintassi di DROP VIEW
DROP VIEW <nome vista>;
Quando viene eseguita un'operazione di questo genere Oracle automaticamente, oltre a cancellare la definizione della vista dal dizionario dei dati, procede con l'eliminazione degli eventuali privilegi sulla vista concessi ad altri utenti.
Modifica della definizione di una vista
Per modificare una vista possiamo cancellarla e ricrearla aggiungendo la modifica oppure possiamo "sovrascriverla". La prima soluzione ha però come conseguenza la cancellazione di tutti i privilegi eventualmente concessi ad altri utenti per l'utilizzo della vista, mentre con la seconda soluzione i privilegi sarebbero mantenuti.
Per sostituire la definizione di una vista usiamo quindi la clausola OR REPLACE
del comando CREATE VIEW
. Se la vista esiste nello schema corrente sarà modificata, se invece non esistesse Oracle ne creerebbe una nuova.
Ad esempio immaginiamo voler modificare la definizione della vista "my_view", per includere la colonna "indirizzo".
SQL> CREATE OR REPLACE VIEW my_view AS 2 SELECT nominativo, data_assunz, paese_residenza, indirizzo 3 FROM impiegati;
Interrogazione di una vista
Una vista viene interrogata con lo statement SELECT, così come accade per le tabelle. Ad esempio interroghiamo le viste create precedentemente.
SQL> SELECT * FROM my_view; SQL> SELECT * FROM new_employees; SQL> SELECT * FROM readonly_view;
Come volevasi dimostrare è più semplice eseguire una vista che una query. Inoltre, l'utente a cui è affidata l'esecuzione della vista può non preoccuparsi affatto di conoscere la definizione della vista, ne le tabelle su cui è basata.
Operazioni DML con le viste
Le viste consentono l'esecuzione delle classiche operazioni di DML, ma con alcune limitazioni. Queste operazioni sono impossibili se ad esempio la definizione della vista include:
- la clausola
DISTINCT
; - la clausola
GROUP BY
; - query nidificate.
Quelle appena elencate sono solamente alcune fra le limitazioni possibili. Bisogna tener presente che le operazioni che si eseguono sulle viste vengono in realtà effettuate sulle tabelle di base.
Ad esempio creiamo una nuova vista denominata "fatherview" e inseriamo una nuova riga nella tabella base, Padre, usufruendo della vista appena creata.
SQL> CREATE VIEW fatherview AS SELECT * FROM padre; SQL> INSERT INTO fatherview VALUES ((SELECT MAX (idpadre) + 1 FROM padre), 2 'Petrella Walter', 3 TO_DATE ('16-08-1963', 'DD-MM-YYYY')); SQL> SELECT * FROM fatherview ORDER BY 1;