Procedure e stored procedure II-AD12

Stored procedure

Abbiamo visto come creare una semplice Procedure, (nell’articolo precedente) vediamo ora come utilizzarla. Per richiamare una Stored Procedures si utilizza lo statement CALL seguito dal nome della procedura, ad esempio:

CALL TuttiGliStudenti()

Così, questa linea di codice restituirà il recordset generato dalla nostra procedura che, come abbiamo visto, effettua una semplice query di SELECT all’interno della tabella “Studenti” del nostro database.

Utilizzo di parametri all’interno di una Stored Procedure

Nella definizione di una Procedure in MySQL è anche possibile prevedere il passaggio di parametri. Questi possono essere di tre tipi:

  • IN: indica un argomento in ingresso nella routine; questo viene definito al momento dell’invocazione della procedura e non può essere modificato al suo interno;
  • OUT: indica un argomento il cui valore viene determinato all’uscita dalla procedura; tali valori saranno poi utilizzabili dagli utenti all’esterno della procedura;
  • INOUT: indica che un dato argomento è, allo stesso tempo, un valore in ingresso ed in uscita (e pertanto il suo valore è mutevole all’interno della procedura).

Vediamo ora un semplicissimo esempio di creazione di una procedura in MySQL avente un parametro IN, partendo dall’esempio visto in precedenza:

DELIMITER **;
CREATE PROCEDURE StudentiNellaProvincia(IN prov VARCHAR(255))
BEGIN
SELECT * FROM Studenti  WHERE provincia = prov;
END **
DELIMITER ;

Abbiamo creato dunque una procedura che – attraverso un parametro in ingresso – seleziona solo gli studenti residenti in una data provincia. Per introdurre il parametro in ingresso abbiamo utilizzato, tra le parentesi tonde, questa sintasi:

IN nome_parametro TIPO DI DATO

Vediamo ora come implementare una Stored Procedure con un parametro in uscita. Questo l’esempio:

DELIMITER **;
CREATE PROCEDURE QuantiStudenti(OUT totale INT)
BEGIN
SELECT COUNT(*) INTO totale FROM Studenti;
END **
DELIMITER ;

In questo caso, per richiamare la nostra procedura, utilizzeremo il seguente codice:

CALL QuantiStudenti(@tot);
SELECT @tot;

In pratica abbiamo definito, come argomento di ritorno, una variabile @tot e, successivamente, ne abbiamo estratto il valore mediante SELECT.