Slide Oracle Pl SQL

87
ORACLE SQL e PLSQL Elementi di Base

Transcript of Slide Oracle Pl SQL

Page 1: Slide Oracle Pl SQL

ORACLE

SQL e PLSQLElementi di Base

Page 2: Slide Oracle Pl SQL

GLI ASPETTI FONDAMENTALI DEL DISCORSO SQL

Con SQL (Structured Query Language), si può conversare con ORACLE chiedendo le informazioni che si desidera selezionare (select), inserire (insert), aggiornare (update) o cancellare (delete). In effetti questi, sono i quattro verbi fondamentali che si utilizzano per fornire istruzioni a ORACLE.

Page 3: Slide Oracle Pl SQL

Si tratta infatti di un prodotto molto potente di ORACLE che consente di raccogliere le istruzioni fornite dall’utente, controllarne la correttezza e quindi sottoporle a ORACLE

SQL*PLUS

Assicura Il colloquio tra l’utente e SQL

Successivamente, tali istruzioni si possono modificare o riformulare per cui si avrà una risposta elaborata da ORACLE sulla base degli ordini o delle direttive impartiti.

Page 4: Slide Oracle Pl SQL

Si può pensare a SQL*PLUS come a un semplice collaboratore, un assistente che segue le istruzioni dell’utente e lo aiuta a eseguire il lavoro in maniera più veloce. Si interagisce con questo collaboratore semplicemente digitando con la tastiera.

LO SCOPO DI SQL * PLUS ?

Page 5: Slide Oracle Pl SQL

Per SQL * PLUS non è importante se i comandi SQL vengono digitati in maiuscolo o in minuscolo

Alcune cose importanti sullo stile (1/5)

Select argoMENTO, sezione, PAGINA FROM gioRNAle;

produce lo stesso risultato se scritta :

select Argomento, Sezione, Pagina from Giorna1e;

Page 6: Slide Oracle Pl SQL

L’utilizzo di lettere maiuscole o minuscole è importante soltanto quando in SQLPLUS o in ORACLE vengono verificati i termini di un’uguaglianza nel database.

Se si indica a ORACLE di trovare un riga in cui Sezione = ‘f’, e Sezione, è in realtà corrispondente a ‘F’, ORACLE non trova nulla (perché f e F non coincidono).

Alcune cose importanti sullo stile (2/5)

Page 7: Slide Oracle Pl SQL

Pertanto, la lettera ‘F’, in questo uso, viene definita come elemento letterale, ovvero significa che nella Sezione deve essere verificata la presenza della lettera ‘F’ e non ricercata una colonna denominata F.

L’apice singolo su un lato della lettera indica che si tratta di una ricerca letterale e non di un nome di colonna.

Alcune cose importanti sullo stile (3/5)

Page 8: Slide Oracle Pl SQL

I termini Select, from, Where, Order by, having e group by vengono sempre indicati in minuscolo e con un tipo di carattere diverso da quello del corpo del testo.

Anche i comandi SQLPLUS sono riportati nello stesso stile: column set save, tittle e così via

Alcune cose importanti sullo stile (4/5)

Page 9: Slide Oracle Pl SQL

IN, BETWEEN, UPPER, SOUNDEX e altri operatori e funzioni di SQL vengono riportati in maiuscolo e con un tipo di carattere diverso.

I nomi di colonna sono riportati con l’iniziale maiuscola e il tipo di carattere normale: Argomento, EstOvest, Longitudine e così via.

Per i nomi di tabelle vengono utilizzati caratteri maiuscoli con il tipo di carattere normale:

Es. GIORNALE, CLIMA, LOCAZIONE e così via.

Alcune cose importanti sullo stile (5/5)

Page 10: Slide Oracle Pl SQL

Selezionare dati da tabelle

Sia data la seguente tabella Questa istruzione consente di ottenere la tabella in questo modo:

select Argomento, Sezione, Pagina from GIORNALE

14 rows selected

Page 11: Slide Oracle Pl SQL

Osserviamo da vicino. . .

• Cambia il formato delle intestazioni che risultano diverse da quelle richiamate con il comando SELECT.

• La colonna “Sezione” appare soltanto con la lettera “S” anche se si sono utilizzate lettere maiuscole o minuscole per digitare la riga di comando: SELECT Argomento, Sezione, Pagina from GIORNALE;

Tali cambiamenti sono il risultato delle elaborazioni svolte da SQLPLUS sulle modalità con cui le informazioni dovrebbero essere presentate.

(Selezionare dati da tabelle)

Page 12: Slide Oracle Pl SQL

E’ possibile modificare tali parametri, ma finché non si assegnano modalità diverse, ecco come viene trasformato da SQLPLUS ciò che l’utente digita:

o tutte le intestazioni di colonna sono riportate in caratteri maiuscoli;

o l’ampiezza delle colonne è fissata dal valore definito in ORACLE;

o vengono eliminati gli spazi tra le parole, se l’intestazione di colonna rappresenta una funzione.

Osserviamo da vicino. . .

(Selezionare dati da tabelle)

Page 13: Slide Oracle Pl SQL

Come vengono definiti i parametri per le colonne?

Proprietà di una tabella

Per scoprirlo è sufficiente chiederlo a ORACLE. Occorre chiedere a SQLPLUS di descrivere la tabella come illustrato qui di seguito

Si utilizza il comando DESCRIBE il quale funziona per qualsiasi tabella

• Nella prima colonna abbiamo i nomi delle colonne in tabella.

• Nella seconda colonna, Null?, viene indicata la regola seguita per la colonna citata a sinistra

• Nella terza colonna si fa riferimento alla tipologia del campo

Page 14: Slide Oracle Pl SQL

Consente di sapere il numero delle righe di cui è costituita la tabella

La funzione FEEDBACK

Il comando per attivare tale funzione è:

set feedback 25

Per visualizzare una tabella che sia almeno di 25 righe

set feedback off

Per non visualizzare i messaggi di feedback

A meno che non si imposti un parametro diverso, la funzione di feedback è impostata a 6 righe.

Page 15: Slide Oracle Pl SQL

Alcuni comandi

Set

Molte sono le modalità di esecuzione di un feedback

E’ un comando che indica a SQLPLUS le modalità di esecuzione di un’istruzione

Show Consente di visualizzare le istruzioni impostate. Infatti può essere utile verificare le impostazioni di feedback digitando:

show feedback

la risposta visualizzata da SQLPLUS è:

feedback ON for 25 or more rows

Page 16: Slide Oracle Pl SQL

Select, From, Where e Order by

Sono le quattro parole chiave fondamentali di SQL che vengono utilizzate per selezionare le informazioni da una tabella di ORACLE

Select indica a ORACLE le colonne che si desidera visualizzare. From indica i nomi delle tabelle in cui si trovano tali colonne. Where indica a ORACLE quali qualificatori inserire nelle informazioni selezionate. Order by per fornire un criterio di ordinamento delle informazioni

Page 17: Slide Oracle Pl SQL

Alcuni comandi di esempio select, Argomento, Sezione, Pagina from GIORNALE where Sezione = ‘F’ order by Pagina;

select, Argomento, Sezione, Pagina from GIORNALE where Sezione = ‘F’ order by Pagina , Argomento;

Restituisce la tabella qui illustrata

Restituisce la tabella qui illustrata

Page 18: Slide Oracle Pl SQL

Le Clausole

I comandi select, from where e order by presentano modalità specifiche nella strutturazione delle parole che seguono. In termini relazionali, i gruppi di parole che comprendono queste parole chiave sono spesso definite CLAUSOLE .

Page 19: Slide Oracle Pl SQL

LOGICA E VALORE (1/2)

• Anche la clausola con where, proprio come quella order by, può essere impostata da più parti, ma con un grado di raffinamento decisamente superiore.

• Il grado di utilizzo di where viene controllato mediante l’uso attento di istruzioni logiche impartite a ORACLE secondo le esigenze del momento.

• Le istruzioni vengono espresse utilizzando simboli matematici detti operatori logici.

Page 20: Slide Oracle Pl SQL

LOGICA E VALORE (2/2)

select, Argomento, Sezione, Pagina from GIORNALE where Pagina = 6

Ecco un esempio di relazione tra logica e valore

Le istruzioni restituiscono la tabella

Page 21: Slide Oracle Pl SQL

Verifiche di valori singoli (1/3)

Il segno di uguale viene definito come operatore logico, perché lo si utilizza effettuando una verifica logica, ovvero confrontando i valori posti alla sua sinistra e alla sua destra

Si può utilizzare un singolo operatore logico per verificare un singolo valore

Con i test logici si possono confrontare dei valori, sia con il parametro di uguaglianza, sia con parametri relativi.

Page 22: Slide Oracle Pl SQL

Verifiche di valori singoli (2/3)

Un semplice test, effettuato per tutte le sezioni uguali a B:

select, Argomento, Sezione, Pagina from GIORNALE where Sezione = ‘B’

Ecco il risultato

Page 23: Slide Oracle Pl SQL

Verifiche di valori singoli (3/3)

Il test seguente riguarda tutti i numeri di pagina maggiori di 4 :

select, Argomento, Sezione, Pagina from GIORNALE where Pagina > 4

Page 24: Slide Oracle Pl SQL

L’operatore LIKE (1/2)

Si tratta di un operatore molto efficace con il quale è possibile effettuare una ricerca nelle righe di una colonna di un database per i valori che assomigliano a un dato modello descritto.

Vengono utilizzati due caratteri speciali per contrassegnare il tipo di verifica che si desidera effettuare:“%” il segno di percentuale, detto carattere jolly“_” un trattino di sottolineatura detto marcatore di posizione

Page 25: Slide Oracle Pl SQL

L’operatore LIKE (2/2)

select, Argomento, Sezione, Pagina from GIORNALE where Argomento LIKE ‘N’;

Il segno (%) significa che qualsiasi carattere può essere accettato in quella posizione: un carattere, cento o nessuno. Se la prima lettera è “N”, viene visualizzata la riga trovata mediante l’operatore LIKE .

select, Argomento, Sezione, Pagina from GIORNALE where Argomento LIKE ‘_ _ i%’;

Per trovare tutti gli argomenti che iniziano con la lettera “N”

Page 26: Slide Oracle Pl SQL

LIKE e i caratteri speciali (1/2)

select, Argomento, Sezione, Pagina from GIORNALE where Argomento LIKE ‘%O%O%’;

Si possono anche utilizzare segni di percentuale multipli. Per trovare le parole in cui siano presenti due ‘o’ minuscole in qualsiasi posizione, vengono utilizzati tre segni di percentuale, come in questo esempio :

Il risultato è il seguente

Page 27: Slide Oracle Pl SQL

LIKE e i caratteri speciali (2/2)

Si confronti con la stessa query, in cui però l’elemento da ricercare è rappresentato da due “i”

select, Argomento, Sezione, Pagina from GIORNALE where Argomento LIKE ‘ %i%i%’;

Il risultato è il seguente

Questa funzionalità di ricerca può avere un ruolo importante nel rendere un’applicazione più facile da utilizzare, semplificando le ricerche per nome, prodotto, indirizzo e altri elementi che potrebbero essere ricordati solo parzialmente.

Page 28: Slide Oracle Pl SQL

NULL e NOT NULL (1/2)

select Città, DataCampione, Precipitazione from COMFORT where Precipitazione IS NULL

Si osservi la seguente istruzione:

IS NULL fondamentalmente indica le posizioni in cui il dato è mancante. Poiché il dato è sconosciuto, il valore nella colonna non è indicato come 0, ma la posizione rimane vuota.

Utilizzando NOT , si possono anche trovare record per cui i dati invece esistono, impostando la query seguente:

select Città, DataCampione, Precipitazione from COMFORT where Precipitazione IS NOT NULL

Page 29: Slide Oracle Pl SQL

NULL e NOT NULL (2/2)

Ecco la tabella risultante

Page 30: Slide Oracle Pl SQL

Verifiche semplici con un elenco di valori (1/2)

Se si possono utilizzare operatori logici per verificare un singolo valore, esistono altri operatori logici che si possono utilizzare per verificare diversi valori, come un elenco?

select, Argomento, Sezione, Pagina from GIORNALE where Sezione IN (‘A’, ‘B’, ‘F’);

Page 31: Slide Oracle Pl SQL

Verifiche semplici con un elenco di valori (2/2)

select, Argomento, Sezione, Pagina from GIORNALE where Sezione = ‘F’ OR Pagina > 7;

select, Argomento, Sezione, Pagina from GIORNALE where Sezione = 7AND Pagina between 7 AND 10;

Infine si possono selezionare le righe nella Sezione F tra la pagina 7 e la pagina 10 impostando la seguente query:

Page 32: Slide Oracle Pl SQL

Test logici su un elenco di valori

Esempio con numeri

Esempio con lettere o caratteri

Page 33: Slide Oracle Pl SQL

Logica della combinazione

Gli operatori AND e OR si utilizzano seguendo il significato comune dei termini corrispondenti (“e” e “o”). Possono essere combinati in un numero virtualmente infinito di modi ma con molta attenzione

select, Argomento, Sezione, Pagina from GIORNALE where Sezione = ‘A’OR Sezione = ‘B’AND pagina > 2

Ecco alcuni esempi

select, Argomento, Sezione, Pagina from GIORNALE where Sezione = ‘A’AND pagina > 2OR Sezione = ‘B’

Page 34: Slide Oracle Pl SQL

Le sottoquery

select Sezione from GIORNALE where Argomento = ‘Salute’

select Argomento from GIORNALE

where Sezione = ‘F’);

select ARGOMENTO from GIORNALE where Sezione = (select Sezione from

GIORNALE where Argomento = ‘Salute’);

Le due query possono essere combinate insieme

Page 35: Slide Oracle Pl SQL

Valori singoli in una sottoquery In effetti, il comando SELECT tra parentesi

(definito sottoquery) ha per risultato un valore singolo, F. Nella query principale il valore F è trattato come se fosse un letterale ‘F’. Pertanto il segno di "uguale" rappresenta una verifica per un valore singolo e non funziona con elenchi di valori , Nel caso in cui la query ha più di una riga come risultato allora si ha il seguente messaggio:

select * from GIORNALE where Sezione = (select Sezione from

GIORNALE where Pagina = 1);

ERROR : ora – 1427: single-row subquery returns more than one row

Page 36: Slide Oracle Pl SQL

Elenco di valori da una sottoquery

In una sottoquery possono essere utilizzati operatori logici a valori multipli. Se una sottoquery ha come risultato una o più righe, il valore nella colonna per ciascuna riga viene visualizzato in un elenco.

Ad esempio per conoscere le città e i paesi in cui il tempo è nuvoloso. Si potrebbe avere una tabella di informazioni complete sul tempo per le città e una tabella di localizzazione per città e paesi corrispondenti:

Un’istruzione del tipo:

select Citta , Paese from LOCAZIONE where Citta IN (‘select Citta from CLIMA where Condizione = ‘NUVOLOSO’);

Page 37: Slide Oracle Pl SQL

Operatori a valori multipli (1/2)

Il loro compito principale è quello di creare una sottoquery che produca un elenco che possa essere verificato logicamente.

QUALI GLI ASPETTI DA CONSIDERARE ?

• La sottoquery deve avere una sola colonna, oppure deve confrontare le colonne selezionate con le colonne multiple poste tra parentesi nella query principale

• La sottoquery deve essere racchiusa tra parentesi

Page 38: Slide Oracle Pl SQL

Operatori a valori multipli (2/2)

• Le sottoquery che hanno come risultato soltanto una riga possono essere utilizzate sia con operatori a valori singoli, sia con operatori a valori multipli.

• Le sottoquery che hanno come risultato più di una riga possono essere utilizzate soltanto con operatori a valori multipli

• L’operatore BETWEEN non funziona se utilizzato come in questa istruzione

select * from METEO where Temperatura BETWEEN 16 AND (select Temperatura from METEO where Citta = ‘PARIGI’);

Page 39: Slide Oracle Pl SQL

Combinare più tabelle

Premesso che le tabelle abbiano un campo comune, basta semplicemente utilizzare una query con WHERE per indicare a ORACLE ciò che le due tabelle hanno in comune.

select CLIMA .Citta , Condizione, Temperatura, Latitudine,

NordSud, Longitudine, EstOvest from CLIMA , LOCAZIONE where CLIMA.Citta =LOCAZIONE.Citta;

L’istruzione qui illustrata consente di sapere il CLIMA presente nelle varie Città, prelevando tali informazioni dalle tabelle CLIMA e LOCAZIONE

Page 40: Slide Oracle Pl SQL

Osserviamo da vicino. . .

(Combinare più tabelle)

La tabella risultante è la seguente:

Le righe presenti in questa tabella combinata sono quelle che riportano i valori delle città presenti in entrambe le tabelle originarie

E’ come dire “seleziona le righe nella tabella CLIMA e nella tabella LOCAZIONE dove le città sono uguali”. Per cui se una città è riportata soltanto in una tabella, manca il termine di uguaglianza nell’altra tabella.

Page 41: Slide Oracle Pl SQL

Osserviamo da vicino. . .

(Combinare più tabelle)

Se nella prima riga fosse stato scritto semplicemente select Citta , Condizione , Temperatura,

Latitudine

Mediante il comando SELECT vengono selezionate le colonne delle due tabelle che si desidera vedere visualizzate insieme;

Non sarebbe stato possibile per ORACLE determinare la città a cui si faceva riferimento

Pertanto le due possibilità di sintassi corretta della query con select potrebbero essere “CLIMA.Citta” oppure “LOCAZIONE.Citta”

Page 42: Slide Oracle Pl SQL

Creazione di una vista

La proiezione o tabella risultante può ricevere un nome ed essere utilizzata proprio come una vera tabella. Questo procedimento viene definito come creazione di una vista

create view INVASIONE AS select CLIMA.Citta ,Condizione , Temperatura,

Latitudine. NordSud, Longitudine, EstOvest for CLIMA LOCAZIONE where CLIMA.Citta = LOCAZIONE. Citta

View created.

Page 43: Slide Oracle Pl SQL

Creazione della nuova versione di una vista

Con il comando CREATE OR REPLACE VIEW è possibile creare una nuova versione della vista senza perdere quella precedente.

create OR replace view INVASIONE as select METEO ,Citta, Condizione, Temperatura,

Latitudine, NordSud, Longitudine, EstOvest from METEO LOCAZIONE where METEO.Citta =LOCAZIONE.Citta AND Paese = ‘Grecia’ View created

Ecco un esempio.

Page 44: Slide Oracle Pl SQL

Espansione della visualizzazionedi una vista

Una caratteristica importante delle viste è quella di poter occultare o anche modificare i dati. Questo consente di creare report molto complessi impostando, a priori, una serie di viste semplici, elementi o gruppi magari delimitati in modo da visualizzare soltanto determinate parti dell’intera tabella.

Qualsiasi qualificazione inserita in una query può diventare parte di una vista

Le viste non sono istantanee dei dati fissati in un determinato punto nel passato, ma sono elementi dinamici che riflettono costantemente i dati delle tabelle di origine.

Page 45: Slide Oracle Pl SQL

INSERT, UPDATE, DELETE

INSERT consente di inserire una riga di informazioni direttamente in una tabella

UPDATE consente di aggiornare le informazioni presenti in una o più tabelle

DELETE consente di cancellare le informazioni presenti in una o più tabelle

Page 46: Slide Oracle Pl SQL

Il comando INSERT

Data la seguente tabella

Per aggiungere una nuova riga a questa tabella, occorre la seguente istruzione

insert into COMFORTvalues ('WALPOLE', TO_DATE('21‑MAR‑1993','DD‑MON‑YYYY'), 13.8, 6.ó, o);

Page 47: Slide Oracle Pl SQL

Osserviamo da vicino. . .

(Il comando INSERT)

• La parola values deve precedere l'elenco di dati da inserire.

• Una stringa di caratteri deve essere racchiusa fra apici singoli.

• I numeri possono stare da soli. • I campi devono essere separati da virgole e

devono avere lo stesso ordine delle colonne nella descrizione della tabella.

Per inserire una data in un formato diverso occorre utilizzare la funzione TO_DATE con una maschera di formattazione,

Page 48: Slide Oracle Pl SQL

INSERT con SELECT

insert into COMFORT(DataCampione, Precipitazione, Citta, Mezzogiorno, Mezzanotte)select TO_DATE('22‑DEC‑1993','DD‑MON‑YYYY'), Precipitazione,'WALPOLE', Mezzogiorno, Mezzanottefrom COMFORTwhere Citta = 'KEENE' and DataCampione = '22‑DEC‑93',

È anche possibile inserire informazioni che sono state selezionate da una tabella

L’istruzione che segue inserisce delle colonne insieme a dei valori

Page 49: Slide Oracle Pl SQL

UPDATE (1/2)

UPDATE richiede di impostare valori particolari per ogni colonna che si desidera modificare e di specificare su quale riga o su quali righe si desidera operare utilizzando una clausola where costruita attentamente

update COMFORT set Precipitazione = .5 Mezzanotte = 22.9

where Citta = ‘walpole’ AND DataCampione = TO_DATE (‘22-DEC-

1993’, ‘ DO-MON-YYYY’);

Page 50: Slide Oracle Pl SQL

UPDATE (2/2)

Si possono anche svolgere calcoli, funzioni stringa e ogni altra legittima funzione nell'impostazione di un valore per update

update COMFORT set Mezzanotte=Mezzanotte+1, Mezzogiorno=Mezzogiorno+1where Citta = 'WALPOLE';4 rows updated.

Nell'esempio seguente tutte le temperature di Walpole sono aumentate di un grado:

Page 51: Slide Oracle Pl SQL

UPDATE + SELECT (1/2)

È possibile impostare i valori in un comando update incorporandovi un’istruzione select proprio nel mezzo. Si noti che questa select ha la propria clausola where, che preleva la temperatura di MANCHESTER dalla tabella CLIMA, e update ha la propria clausola where che influisce solo sulla città WALPOLE in un certo giorno:

update COMFORT set Mezzanotte =(select Temperatura from CLIMA where Citta = 'MANCHESTER') where Citta = 'WALPOLE'AND DataCampione = TO DATE('22‑DEC‑1993','DD‑MON‑YYYY');1 row updated.

Page 52: Slide Oracle Pl SQL

UPDATE + SELECT (2/2)

Ouando si utilizza una sottoquery con update, occorre assicurarsi che non restituisca più di un record per ognuno dei record aggiornati, altrimenti l'aggiornamento fallisce

Le colonne devono essere racchiuse fra parentesi e separate da virgole

update COMFORT set (Mezzogiorno, Mezzanotte) =(sel ect Umidita, Temperaturafrom CLIMAwhere Citta = 'MANCHESTER')where Citta = 'WALPOLE'AND DataCampione = TO_DATE('22‑DEC‑1993','DD‑MON‑YYYY');

Page 53: Slide Oracle Pl SQL

DELETE

La rimozione di una o più righe da una tabella richiede il comando DELETE. La clausola WHERE è essenziale per eliminare solo le righe desiderate.

delete from COMFORT where Citta = 'WALPOLE';

DELETE senza una clausola WHERE svuota completamente la tabella

Page 54: Slide Oracle Pl SQL

PL / SQL

PL/SQL è un linguaggio strutturato di query (SQL, Structured Query Language) che a sua volta ha come sottoinsieme il linguaggio procedurale (PL , Procedural Language) di ORACLE.

Il linguaggio PL/SQL può essere utilizzato per codificare le proprie regole aziendali mediante la creazione di procedure memorizzate a package, per attivare eventi di database quando necessario o per aggiungere una logica di programmazione all’esecuzione dei comandi SQL

Il codice PL/SQL è raggruppato in strutture dette blocchi. Se si crea una procedura memorizzata o un package, si assegna un nome al blocco di codice PL/SQL

Page 55: Slide Oracle Pl SQL

PL / SQL

Un blocco di codice PL/SQL contiene tre sezioni

La Sezione delle dichiarazioni inizia con la parola chiave declare e termina quando inizia la Sezione dei comandi eseguibili, indicata dalla parola chiave begin .

DichiarazioniComandi Eseguibili Gestione delle eccezioni

Fa seguito la Sezione della gestione delle eccezioni, il cui inizio viene indicato dalla parola chiave exception

Page 56: Slide Oracle Pl SQL

PL / SQL

Ecco la struttura tipica di un blocco PL/SQL

declare<Sezione dichiarazioni>begin<comandi eseguibili>exception<gestione delle eccezioni>end;

Page 57: Slide Oracle Pl SQL

I CICLI

I LOOP possono essere utilizzati per elaborare più record all'interno di un singolo blocco PL/SQL. Il linguaggio PL/SQL supporta tre tipi di cicli.

Page 58: Slide Oracle Pl SQL

CICLO SEMPLICE

declare pi constant NUMBER(9,7):= 3.1415926 radius INTEGER(5); Area NUMBER(14,2);

begin radius := 3; Loop area := pi*power(radius,2);

insert into AREA values (radius, area);

radi us : = radi us+1; exit when area >100;

End Loop; end;

Page 59: Slide Oracle Pl SQL

CICLO SEMPLICE A CURSORE (1/2)

Gli attributi del cursore %FOUND, %NOTFOUND e %ISOPEN sono booleani e vengono impostati su VERO o FALSO. Poiché detti attributi sono booleani, è possibile valutare le loro impostazioni senza farli esplicitamente coincidere con valori di VERO o FALSO.

Page 60: Slide Oracle Pl SQL

CICLO SEMPLICE A CURSORE (2/2)

Per determinare lo stato del cursore vengono verificati i relativi attributi

%FOUND I1 cursore può trasrnettere un record.%NOTFOUND I1 cursore non può trasmettere altri record.%ISOPEN I1 cursore è stato aperto.

%ROWCOUNT Nurnero di righe trasmesse dal cursore sino a questo momento.

Page 61: Slide Oracle Pl SQL

CICLO FOR (1/2)

Mentre nei cicli semplici il corpo dei comandi viene eseguito finché non viene soddisfatta una condizione di uscita.

In un ciclo FOR, il ciclo viene eseguito per un numero di volte specificato.

L'inizio del ciclo FOR viene indicato dalla parola chiave FOR, seguita dai criteri utilizzati per determinare quando uscire. Dato che il numero di esecuzioni del ciclo viene impostato all'inizio del ciclo stesso, non è necessario un comando exit all'interno del ciclo

Page 62: Slide Oracle Pl SQL

CICLO FOR

In questo esempio le aree dei cerchi vengono calcolate basandosi su valori di Radius da 1 a 7 compresi.

declare pi constant NUMBER(9,7) := 3.1415926, radius INTEGER (5); area NUMBER(14,2)

begin; for radius in 1..7 loop area := pi*power(radius,2); insert into AREA values (radius, area); end loop;

end;

Page 63: Slide Oracle Pl SQL

Osserviamo da vicino. . .

(Il Ciclo FOR )

Si noti che nel ciclo FOR non esiste una riga:radius := radius+1;Dato che le specifiche del loop determinano:for radius in 1..7 loop

I valori di Radius sono già specificati. Per ciascun valore verranno eseguiti tutti i comandi all'interno del ciclo (tali comandi possono comprendere altra logica condizionale, come condizioni if). Quando il ciclo ha completato l'elaborazione di un valore di Radius, vengono verificati i limiti nella clausola FOR e si passa, a seconda dei casi, a elaborare il successivo valore di Radius o a completare l'esecuzione del ciclo.

Page 64: Slide Oracle Pl SQL

CICLO FOR A CURSORE (1/3)

In un ciclo FOR a cursore, i risultati di una query vengono utilizzati per determinare dinamicamente il numero di esecuzioni del ciclo

In questi cicli l'apertura, la trasmissione e la chiusura dei cursori sono eseguite implicitamente

Di seguito è riportato un ciclo FOR a cursore che effettua una query sulla tabella RADIUS_VALS e inserisce record nella tabella AREA:

Page 65: Slide Oracle Pl SQL

CICLO FOR A CURSORE (2/3)

Il ciclo FOR a cursore illustrato effettua una query sulla tabella RADIUS_VALS e inserisce record nella tabella AREA:

declare _ pi constant NUMBER(9,7) := 3.1415926, 1 . _ area NUMBER(14,2), l _ cursor rad cursor is

select * from RADIUS VALS, rad_ val rad cursor%ROWTYPE; ~

begin for rad val in rad cursor loop

area := pi*power(rad val.radius,2); insert into AREA values (rad val.radius, area)

end loop, end, . /

Page 66: Slide Oracle Pl SQL

CICLO FOR A CURSORE (3/3)

Il ciclo FOR a cursore illustrato effettua una query sulla tabella RADIUS_VALS e inserisce record nella tabella AREA:

In un ciclo FOR a cursore non compare un comando open o fetch. Il comando:

for rad val in rad cursor apre implicitamente il cursore "rad_cursor" e

trasmette un valore nella variabile

Page 67: Slide Oracle Pl SQL

CICLO WHILE (1/2)

In un ciclo WHILE i comandi sono ripetuti finché non viene soddisfatta una condizione di uscita

Invece di specificare la condizione di uscita per mezzo di un comando exit all'interno del ciclo, la si specifica nel comando WHILE in cui inizia il ciclo.

Esaminiamo, nella diapositiva successiva, un ciclo WHILE che consenta l'elaborazione di più valori di Radius

Page 68: Slide Oracle Pl SQL

CICLO WHILE (2/2)

declare pi constant NUMBER(9,7) := 3.1415926; radius INTEGER(5); area NUMBER(14,2);

begin radius := 3; while radius<=7 loop

area := pi*power(radius,2); insert into AREA values (radius, area);

radius := radius+1; end loop;

end;./

Il ciclo WHILE è simile nella struttura al ciclo semplice, in quanto termina basandosi sul valore di una variabile

Page 69: Slide Oracle Pl SQL

I TRIGGER

Sono privilegi di sistema che vengono creati sulle tabellecon il comando CREATE TRIGGER

Esistono 14 tipi di trigger.

Un tipo di trigger è definito dal tipo di transazione e dal livello al quale il trigger viene eseguito

Page 70: Slide Oracle Pl SQL

I TRIGGER

Trigger a livello di riga Trigger a livello di istruzione Trigger BEFORE e AFTER Trigger INSTEAD OF

Combinando i differenti tipi di azione di trigger si ottengono 14 configurazioni possibili.

Page 71: Slide Oracle Pl SQL

create [or replace] trigger [utente.]trigger {before I after I instead of} {delete |insert |update [of colonna [, colonna] ] } [or { delete

| insert | update [of colonna [, colonna] ] } ]

on [utente.]{TABLE I VIEW}[ [referenc~ng { old [as] vecch~o

| new [as] nnuovo} ]for each {row I statement} [when (condizione)] ] blocco pl/sql

Osserviamo da vicino. . .

(I Trigger )

La sintassi

Page 72: Slide Oracle Pl SQL

Nella progettazione di un trigger è possibile una grande flessibilità grazie al significato che assumono

Osserviamo da vicino. . .

(I Trigger )

La sintassi

• Before

• After• Dele

te• Inser

t• Upd

ate• New

LE PAROLE CHIAVE

LE CLAUSOLE• For

each • When

Page 73: Slide Oracle Pl SQL

COMBINAZIONI DI TRIGGER

I trigger per comandi multipli di insert, update e delete su una tabella possono essere combinati in un singolo trigger, posto che siano tutti dello stesso livello

Page 74: Slide Oracle Pl SQL

LE PROCEDURE Per creare un oggetto procedurale è necessario disporre del privilegio di sistema CREATEPROCEDURE

Per l'esecuzione, l’oggetto procedurale fa riferimento ai privilegi di tabella del suo proprietario, non privilegi dell'utente che esegue l'oggetto stesso.

Per eseguire una procedura, l’ utente non deve obbligatoriamente disporre del privilegio di accesso alle tabelle cui accede la procedura stessa.

Per consentire ad altri utenti di eseguire un oggetto procedurale, occorre utilizzare il comando GRANT per il privilegio EXECUTE

Page 75: Slide Oracle Pl SQL

La sintassi utilizzata per eseguire una procedura dipende dall'ambiente da cui la procedura viene richiamata. Dall'interno di SQLPLUS una procedura può essere eseguita utilizzando il comando EXECUTE, seguito dal nome della procedura stessa.

Qualsiasi argomento da passare alla procedura deve essere racchiuso tra parentesi e seguire il nome della procedura

execute NUOVO LAVORATORE('ADAH TALBOT');

ES.

LE PROCEDURE

Page 76: Slide Oracle Pl SQL

PRIVILEGI DI TABELLA NECESSARI

Gli oggetti procedurali possono fare riferimento a tabelle. Perché gli oggetti vengano eseguiti correttamente, il proprietario della procedura, del package o della funzione da eseguire deve disporre di privilegi sulle tabelle utilizzate.

LE FUNZIONI

Le funzioni possono restituire un valore al chiamante (le procedure non sono in grado di restituire valori). Tale valore viene restituito utilizzando la parola chiave RETURN all'interno della funzione

Page 77: Slide Oracle Pl SQL

PACKAGE (1/2)

I package sono gruppi di procedure, funzioni, variabili e istruzioni SQL riuniti in un'unica unità. Per eseguire una procedura all'interno di un package è necessario riportare prima il nome del package e quindi il nome della procedura.

execute REGISTRO_PACKAGE.NUOVO_EAVORATORE('ADAH TAEBOT'),

I package consentono a più procedure di utilizzare le stesse variabili e gli stessi cursori.

Page 78: Slide Oracle Pl SQL

PACKAGE (2/2)

I package sono gruppi di procedure, funzioni, variabili e istruzioni SQL riuniti in un'unica unità. Per eseguire una procedura all'interno di un package è necessario riportare prima il nome del package e quindi il nome della procedura.

execute REGISTRO_PACKAGE.NUOVO_EAVORATORE('ADAH TAEBOT'),

I package consentono a più procedure di utilizzare le stesse variabili e gli stessi cursori.

Page 79: Slide Oracle Pl SQL

Sintassi di CREATE PROCEDURE create [or replace] procedure [utente.]

procedura [(argomen to [ IN|OUT|IN OUT] t ipodat i [(argomento [IN|OUT|IN OUT] tipodati] . . . )]

{IS|AS} {blocco | programma esterno};Sintassi di CREATE FUNCTION

create [or replace] function [utente.]funzione[(orgomento [IN|OUT|IN OUT] tipodoti[,orgomento [ I N | OUT | I N OUT] tipodoti] )]RETURN tipodoti{ISIAS} {blocco I corpo esterno};

Con tale comando vengono creati sia il titolo, sia il corpo della procedura. La parola chiave RETURN specifica il tipo di dati del valore restituito dalla funzione

Page 80: Slide Oracle Pl SQL

Riferimenti a tabelle remote L'accesso a tabelle remote è consentito dalle

istruzioni SQL nelle procedure. È possibile effettuare una query su una tabella remota mediante un link di database nella procedura, dove la procedura inserisce un record nella tabella LAVORATORE del database definito di link REMOTE_CONNECT.

create or replace procedure NUOVO_LAVORATORE (Nome_Persona IN varchar2)

AS BEGIN

insert into LAVORATORE@REMOTE CONNECT

(Nome, Eta, Alloggio) values

(Nome_Persona, null, null),END,/

Page 81: Slide Oracle Pl SQL

SHOW ERROR

Visualizza tutti gli errori associati con l'oggetto procedurale creato per ultimo.

Verifica nella vista del dizionario di dati USER_ERRORS gli errori associati con il più recente tentativo di compilazione per l'oggetto procedurale in esame.

Visualizza il numero di riga e di colonna per ciascun errore, insieme al testo del messaggio di errore.

Page 82: Slide Oracle Pl SQL

DBMS - OUTPUT (1/2)

Il package DBMS_OUTPUT consente di utilizzare le tre funzioni di debugging elencate di seguito.

PUT Colloca più output sulla stessa riga.

PUT LINE Colloca ciascuna uscita su una riga separata.

NEW_LINE Utilizzata con PUT; segnala la fine della riga di output corrente.

Page 83: Slide Oracle Pl SQL

DBMS - OUTPUT (2/2)

PUT e PUT_LINE vengono utilizzate per generare le informazioni di debugging che si desidera visualizzare

PUT e PUT_LINE possono essere utilizzate anche al di fuori dei cicli, ma gli scopi sottesi a tali utilizzi possono essere raggiunti in modo migliore per mezzo del comando RETURN nelle funzioni

Page 84: Slide Oracle Pl SQL

FUNZIONI PERSONALIZZATE

La creazione di funzioni pesonalizzate potenzia notevolmente il linguaggio SQL in quanto consente di “adeguarlo” alle proprie esigenze .

L’unico limite delle funzioni personalizzate è che esse non possono essere utilizzate in delimitatori CHECK o DEFAULT

Le funzioni richiamate devono essere autonome (perché create con il comando CREATE FUNCTION) o dichiarate nelle specifiche di package

Page 85: Slide Oracle Pl SQL

CREAZIONE DI UN PACKAGEPer la creazione di package, la specifica del package e il corpo del package stesso vengono creati separatamentePertanto abbiamo due comandi :

CREATE PACKAGE per la specifica del package

CREATE PACKAGE BODYper il corpo

Il corpo di un package contiene i blocchi e le specificazioni PL/SQL per tutti gli oggetti pubblici elencati nelle specifiche del package

Una specifica di package consiste nell'elenco delle funzioni, procedure, variabili costanti, cursori ed eccezioni che saranno disponibili all'utente del package.

Page 86: Slide Oracle Pl SQL

Compilazione di procedure package e funzioni

ORACLE compila gli oggetti procedurali al momento della loro creazione

Tuttavia è possibile ricompilare esplicitamente le procedure, le funzioni e i package. Per ricompilare una procedura si utilizza il comando ALTER PROCEDURE,

alter procedure NUOVO_LAVORATORE compile;

L’unica opzione valida per tale comando è COMPILE

Page 87: Slide Oracle Pl SQL

Questa prima parte delCorso

SQL PL/SQLal momento termina qui.