• viste-oracle

    Le viste in Oracle

    Panoramica sulle viste in Oracle.

    Le viste in Oracle

    Le viste (views) sono una tipologia di oggetto nello schema di un utente. Tutti i database relazionali hanno il concetto di vista, che in poche parole si riduce all’idea di memorizzare una query. In un successivo articolo vedremo quali sono i motivi che possono rendere utile avere una vista.

    Una vista è una query con un nome: ad esempio possiamo avere una query che mostra tutti gli impiegati che sono Manager, e lanciare la query ogni mese per vedere quali sono:

    Questa è una query molto semplice, ed è certamente più verosimile trovare nella pratica lavorativa quotidiana una query più complicata, che tiene traccia ad esempio del dipartimento e della città in cui lavorano tali manager:

    risultato-query

    Piuttosto che memorizzare la query in un file e copiarla tutte le volte che serve (o peggio riscrivere la query ogni volta), può essere utile salvare questa query in una vista. Per memorizzare questa query in una vista è sufficiente lanciare un comando del tipo:

    In questo modo viene creata una vista dal nome managers_v (di solito il suffisso _v viene usato per ricordare all’utente che si tratta di una vista e non di una tabella) ed è possibile interrogare in modo molto semplice la vista (come se fosse una tabella) senza mettere in join nuovamente tutte le tabelle:

    Quello che succede dietro le quinte è che Oracle sa che managers_v è una vista ed esegue la query associata alla vista e restituisce il risultato della query.

    Per verificare gli oggetti di tipo VIEW dell’utente, basta lanciare il comando seguente:

    Navigando tra l’object browser del proprio client grafico (ad esempio Toad o SQL Developer), è possibile selezionare l’oggetto vista creato e vedere le colonne di cui è composta la vista

    struttura-vista

    oppure i dati che restituisce la query, oppure le dipendenze della vista, oppure lo script memorizzato per la creazione della vista stessa.

     

    Ad esempio, se voglio scrivere una query che mi restituisca l’impiegato più pagato per ciascun dipartimento, e memorizzarne lo script in oggetto di tipo vista, posso fare qualcosa del tipo:

    La sintassi per la creazione delle viste in Oracle

    La sintassi per creare una vista è la seguente:

    Le viste sono oggetti dello schema e, per impostazione predefinita, la vista verrà creata nello schema corrente. E’ possibile fare riferimento a tabelle di dettaglio di proprietà di un altro utente.

    Le parole chiave opzionali sono le seguenti:

    • OR REPLACE: se la vista esiste già, verrà cancellata prima di essere creata. Senza l’opzione OR REPLACE non è possibile eseguire lo script di creazione di una vista se esiste già una vista con lo stesso nome (viene generato infatti un errore del tipo ORA-00955: name is already used by an existing object).
    • FORCE o NOFORCE: la parola chiave FORCE farà creare la vista, anche se la/e tabella/e di dettaglio nella subquery non esiste. La parola chiave NOFORCE è l’impostazione predefinita e causerà un errore se la tabella di dettaglio non esiste.
    • WITH CHECK OPTION: Con questa opzione, se la subquery include una clausola WHERE, viene impedito l’inserimento di righe che non sarebbero visibili nella vista o update che causerebbero che una riga scompaia dalla vista. Per impostazione predefinita, questa opzione non è abilitata.
    • WITH READ ONLY: impedisce qualsiasi istruzione DML (insert, update e delete) nella vista.
    • CONSTRAINT ConstraintName: Questa opzione può essere usata per dare un nome alle restrizioni WITH CHECK OPTION e WITH READ ONLY in modo che i messaggi di errore risulteranno più comprensibili quando le restrizioni causeranno il fallimento delle istruzioni.

    Può essere fornita una serie di nomi di alias per i nomi delle colonne della vista. Se non previsto, le colonne verranno chiamate con le colonne della tabella o con gli alias specificati nella subquery.

    Il comando ALTER VIEW e la compilazione delle viste in Oracle

    Una vista deve essere compilata prima di poter essere utilizzata. Quando si crea una vista, Oracle verifica che le tabelle di dettaglio e le colonne necessarie su cui si basa la vista esistono. Se non esistono, la compilazione non riesce e la vista non verrà creata, a meno che nella vista si utilizza l’opzione FORCE. In tal caso, la vista verrà creata ma sarà inutilizzabile fino a quando vengono create le tabelle o le colonne a cui si fa riferimento e la vista viene compilata con successo. Quando una vista non valida viene interrogata, Oracle tenterà di compilarla automaticamente. Se la compilazione riesce perché il problema è stato risolto, l’utente non saprà mai che c’è stato un problema, tranne per il fatto che la sua query può richiedere un po’ più del solito. In generale, si dovrebbe compilare manualmente una vista (con il comando ALTER VIEW) per essere sicuri che vengano compilate con successo, piuttosto che fare in modo che siano gli utenti a scoprire gli errori.

    Con il seguente comando si intende creare una vista staff_v che mostra i dipendenti che non sono ancora andati via (campo LEFT_DATE null).

    Tuttavia il campo left_date non esiste nella tabella employees e lo script fallisce con errore: Errore SQL: ORA-00904: “LEFT_DATE”: invalid identifier.

    Se si fosse utilizzata l’opzione FORCE, la vista sarebbe stata creata (nonostante l’errore):

    Però l’interrogazione della vista staff_v genera un errore (ORA-04063: view “HR.STAFF_V” has errors), poiché la vista è stata creata nonostante l’errore (grazie all’opzione FORCE), ma non è valida.

    A questo punto se si esegue l’istruzione di ALTER TABLE e si aggiunge il campo mancante alla tabella di origine (riga 1), l’esecuzione dell’interrogazione della vista avverrà con successo (riga 2) e la vista verrà compilata senza che l’utente si accorga che non era valida. Oppure (è ancora meglio), prima di eseguire l’interrogazione, mediante il comando ALTER VIEW con la parola chiave COMPILE si può compilare la vista e renderla valida prima che venga usata (riga 3).

    Di seguito la sintassi del comando ALTER VIEW e le varie opzioni:

    oracle-alter_view

     

    Non è possibile modificare le definizioni di colonna di una vista dopo la creazione della vista stessa. La vista deve essere eliminata e ricreata.

    Il comando ALTER VIEW

    Per poter cancellare una vista si utilizza il comando DROP VIEW, la cui sintassi è:

    oracle-drop_view

    Ad esempio, per cancellare la vista creata nell’esempio precedente:

     

    Giulio Cantali – IT Consultant

    Creatore di Database Master, il primo percorso per diventare esperti di database

Lascia un commento

Se vuoi condividere la tua opinione, lascia un commento

Puoi usare questi tag e attributi: HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">