LEZIONE17 SQL DDL PROC PAG. 1 / 4 PROF. ANDREA ZOCCHEDDU LEZIONE17 SQL DDL PROC LINGUAGGIO SQL AMMINISTRAZIONE DI DATABASE COMANDI DEL DDL In questa seconda parte della discussione sul DDL vedremo alcuni altri comandi SQL appena più avanzati. In particolare esamineremo: Create or Alter Create or Alter Create or Alter Procedure Group User Serve per Serve per Serve per Create or Alter Grant Serve per STORED PROCEDURE Una procedura è una porzione di programma che deve risolvere un determinato compito eseguendo comandi raggruppati insieme. Chi ha studiato un linguaggio procedurale (Pascal, C++) può pensarla simile alle funzioni e quindi occorre discutere di dichiarazione di parametri e di variabili locali. In generale la procedura è dichiarata come segue: CREATE PROCEDURE Nome (parametri) AS BEGIN Comandi in linguaggio procedurale | SQL END; dove tutte le sezioni sono obbligatorie, tranne i parametri. Una Stored Procedure è scritta in un linguaggio di programmazione che mette insieme comandi procedurali e linguaggio SQL ed è archiviata sul Database Server. Il Cliente può richiamarla in modo semplice specificando il nome e gli eventuali parametri. Il vantaggio di usare una procedura è che l’elaborazione avviene sul “lato Server” senza gravare sul Client e riducendo il traffico di rete. Il Client può ignorare il linguaggio con cui è scritta la Stored Procedure e questo le rende particolarmente utili quando programmi client sono scritti con linguaggi diversi o lavorano su sistemi operativi diversi o in ambienti e piattaforme diverse. PARAMETRI IN, OUT E INOUT I parametri sono degli identificatori di locazione che servono per passare valori dal programma chiamante verso la procedura o dalla procedura verso il programma chiamante o in entrambe le direzioni. Ciascun parametro deve indicare il tipo di dato cui si riferisce. I parametri di tipo IN servono per passare valori verso la procedura ovvero per dare alla procedura dei valori con cui lavorare. Per esempio: CREATE PROCEDURE Inserisci (IN :Voto INT; IN :IDS CHAR[3]; IN :IDM CHAR[3]) [email protected] LEZIONE17 SQL DDL PROC PAG. 2 / 4 PROF. ANDREA ZOCCHEDDU AS BEGIN INSERT INTO Verifiche (Data , Matricola, Materia, Voto) VALUES (Date(), :IDS, :IDM, :Voto) END; È una procedura con tre parametri tutti di tipo IN che corrispondono al voto ed alle chiavi esterne dello studente e della materia di una interrogazione. I nomi dei parametri iniziano con il simbolo “:” (due punti). Prima del parametro si indica il tipo di passaggio. Dopo il parametro si specifica il tipo del dato. I parametri di tipo OUT servono per rendere valori dalla procedura verso il programma che la invoca ovvero per ottenere dalla procedura informazioni calcolate. Per esempio: CREATE PROCEDURE UltimoPrestito (OUT :Quando DATE) AS BEGIN :Quando := SELECT MAX(Data) FROM Prestiti ; END; È una procedura con un parametro di tipo OUT che prende la data dell’ultimo prestito erogato. I parametri di tipo INOUT servono per comunicare in entrambi i sensi tra procedura e programma esterno. FUNZIONI Alcuni linguaggi permettono l’uso di funzioni oltre che di procedure. La funzione restituisce un dato come accade nei linguaggi procedurali (C++ o Pascal). In generale è dichiarata come segue: CREATE FUNCTION Nome (parametri) : Tipo AS BEGIN Comandi in linguaggio procedurale | SQL END; dove tutte le sezioni sono obbligatorie, tranne i parametri. Per esempio: CREATE FUNCTION RecentePrestito (IN :X CHAR[25]) : DATE AS BEGIN RESULT := SELECT MAX(Data) FROM Prestiti INNER JOIN Libri ON Prestiti.IDL=Libri.IDL; WHERE Libri.Genere = :X; END; È una funzione che restituisce la data dell’ultimo prestito di un libro di genere indicato nel parametro. La parola chiave RESULT indica il risultato che deve essere restituito dalla funzione. Un esempio di chiamata potrebbe essere: miaData := RecentePrestito ('Storia'); LINGUAGGIO DEL SERVER Oltre al linguaggio SQL il server incorpora anche un ulteriore linguaggio con cui scrivere le procedure e le funzioni. Il più famoso linguaggio di questo tipo è PL-SQL ma ogni DB Server ha un suo dialetto. In queste dispense ci riferiremo ad un linguaggio generico, valido per la gran parte dei prodotti esistenti. [email protected] LEZIONE17 SQL DDL PROC PAG. 3 / 4 PROF. ANDREA ZOCCHEDDU Le istruzioni che il linguaggio deve prevedere sono almeno le seguenti tre: • Assegnazione • • Istruzione decisionale Istruzione iterativa ASSEGNAZIONE L’assegnazione permette di copiare un valore (spesso ottenuto elaborando una espressione o un comando SQL) in una locazione (una variabile o un parametro OUT). La sintassi generale è la seguente: Locazione := Espressione ; per esempio Y := SELECT MAX(Stipendio) FROM Dipendenti WHERE Mansione = 'Programmatore'; ISTRUZIONE DECISIONALE L’istruzione decisionale permette di decidere se eseguire una altra istruzione in base al risultato di una espressione booleana (spesso ottenuta elaborando un comando SQL). La sintassi generale ha le seguenti due forme: IF Espressione THEN Comando ; e IF Espressione THEN Comando ELSE Comando ; Se dopo la parola THEN o la parola ELSE occorre specificare più di un comando è necessario racchiuderli tra le parole BEGIN ... END. Per esempio IF NOT EXISTS ( SELECT * FROM Prestiti WHERE Libro = :IDL ) AND Restituzione IS NULL ) THEN INSERT INTO Prestiti VALUES (:IDL, :IDP, Oggi() ELSE INSERT INTO Prenotazioni VALUES (:IDL, :IDP ) ; ) questo comando verifica se il libro col codice :IDL è in prestito e non ancora reso. Se è libero allora inserisce il nuovo prestito altrimenti registra solo una prenotazione. Per esempio IF EXISTS ( SELECT * FROM Versamenti WHERE Socio = :IDS AND Prodotto = :IDP AND Data=Oggi()) THEN UPDATE Versamenti SET Quantità = Quantità + :Q WHERE Socio = :IDS AND Prodotto = :IDP AND Data=Oggi() ELSE INSERT INTO Versamenti VALUES (:IDS , :IDP , Oggi() ) ; [email protected] LEZIONE17 SQL DDL PROC PAG. 4 / 4 PROF. ANDREA ZOCCHEDDU questo comando verifica se in data odierna il socio ha già versato lo stesso prodotto. Se lo ha già versato allora incrementa la quantità versata con l’ulteriore quantità che sta versando adesso, altrimenti viene inserito un nuovo versamento. ISTRUZIONE ITERATIVA L’istruzione iterativa permette di effettuare un ciclo fino al verificarsi di una condizione booleana detta guardia (spesso ottenuta elaborando un comando SQL). La sintassi generale ha la seguente forma: WHILE Condizione DO Comando ; Per esempio WHILE 100 < ( DO SELECT SUM(Percentuale) FROM Composizione WHERE Prodotto = 'Margherita' ) UPDATE Composizione SET Percentuale = Percentuale + 1 WHERE Prodotto = 'Margherita' AND Ingrediente = 'olio'; questo comando continua ad incrementare la percentuale dell’ingrediente Olio nella pizza Margherita fino a quando viene raggiunta una composizione pari al 100%. INDICE DELLA LEZIONE Stored Procedure ........................................................................................................................ 1 Parametri IN, OUT e INOUT ................................................................................................... 1 Funzioni .................................................................................................................................... 2 Linguaggio del server ................................................................................................................. 2 Assegnazione ............................................................................................................................ 3 Istruzione decisionale ............................................................................................................... 3 Istruzione iterativa.................................................................................................................... 4 [email protected]
© Copyright 2024 ExpyDoc