Esattamente come una funzione in qualsiasi linguaggio di programmazione evita di riscrivere più volte le stesse cose, le Stored Procedure sono un ottimo metodo di ripetetere query complicate e parametrizzarle in modo da poterle riutilizzare in qualsiasi momento, e col vantaggio di non lavorare direttamente con stringhe SQL chilometriche.

Per creare una nuova Stored Procedure è necessario avere installato MySQL con versione maggiore o uguale alla 5.0 (le Stored Procedure sono state infatti introdotte proprio nella versione 5.0). Se si utilizza il MySQL Query Browser la creazione è abbastanza immediata:

Clic col tasto destro sul database in cui si vuole creare la procedura (Dalla versione 5.0.1 le Procedure sono assegnate a un Database specifico, nella versione 5.0 invece erano globali)

New Stored Procedure From QueryBrowser

Inserimento del nome della nuova procedura

New Stored Procedure From QueryBrowser

Dopo aver cliccato su Create PROCEDURE (la FUNCTION serve per creare un metodo che ritorna sempre un valore), vi troverete davanti a uno stub di procedura simile al seguente:

Stub Stored Procedure

L’istruzione DELIMITER $$ all’inizio della Procedure servono per fare capire al MySQL che il delimitatore di fine istruzione non è più punto e virgola, altrimenti al primo punto e virgola inserito nel metodo il MySQL interpreterebbe che il nostro blocco di istruzioni è terminato. Alla fine del metodo ovviamente viene ripristinato il punto e virgola come DELIMITER standard.

I parametri che possiamo passare alla funzione sono essenzialmente di due tipi: IN e OUT. Attraverso la parola chiave IN specifichiamo che quel parametro è di lettura, mentre OUT indica che è un parametro che verrà assegnato dalla funzione, e quindi utilizzabile dalla Procedure chiamante. Si può anche settare una variabile come INOUT, in modo da poter essere presa sia come input che come output. Di default tutti i parametri sono IN e nel caso delle Stored Function i parametri sono obbligatoriamente tutti IN.

Un esempio di intestazione di Procedure potrebbe quindi essere il seguente:

CREATE PROCEDURE ContaPartite(IN tipoSport VARCHAR(6), OUT numeroPartite)

Una caratteristica delle Stored Procedure in MySQL è che invocando una SELECT all’interno del metodo, il risultato della SQL verrà ritornata dalla Stored Procedure come se fosse stata questa ad eseguire la query, permettendoci quindi di evitare di utilizzare le variabili OUT:

 CREATE PROCEDURE ContaPartite(IN SiglaSport VARCHAR(6))
BEGIN
SELECT COUNT(ID) FROM partite_giocate;
END $$

Per invocare la Stored Procedure appena creata ci basterà eseguire:

CALL ContaPartite('CALCIO');

L’esempio appena fatto è molto banale e non fa capire pienamente le potenzialità delle Stored Procedure, ma ci si può facilmente rendere conto da soli che se si creano un insieme di Procedure e Function che interagiscono tra di loro, si può ottenere un database SQL con query strutturate in maniera gerarchica facilmente gestibile!


Se sei interessato a questo post, potresti anche provare a leggere:

    No related posts