Stored Procedure in Mysql

L’ SQL originariamente non e’ stato pensato come un linguaggio di programmazione ma come un linguaggio per interagire con una base di dati , l’integrazione con i linguaggi di programmazione e l’evoluzione degli stessi hanno creato nuove forme di semplificazione delle operazioni da eseguire sul database, una delle tante sono le “Stored procedure”.

Queste permettono di memorizzare sul server una routine SQL a cui viene associata un nome e accetta dei paramentri , in questo modo molte funzionalita’ proprie dei linguaggi di programmazione come ad esempio i cicli (FOR , WHILE) e espressioni di controllo (IF) vengono acquisite.
La procedura una volta creata e’ facilmente utilizzabile eseguendo semplicemente una query .

Per quanto riguarda MySql sono state implementate solo dalla versione 5.0 la quale offre anche la creazione di funzioni proprie.
Ma andiamo per ordine.

La definizione della procedura avviene dichiarandola con
CREATE
[DEFINER = { user | CURRENT_USER }]

PROCEDURE sp_name ([proc_parameter[,...]])

characteristic...] routine_body
dove:

DEFINER : nome dell’utente mysql a cui deve essere associata la procedura
e’ opzionale.

PROCEDURE: definisce il nome della procedura e i parametri accettati.

I Parametri devono essere definiti come IN , OUT o INOUT,

IN puo’ essere modificato dalla procedura ma le modifiche non saranno visibili da chi l’ha chiamata , questo e’ a sola lettura.
OUT puo’ essere modificato e la modifica rimmarra’ visibile da chi ha chiamato la procedura , il suo valore iniziale sarà sempre NULL , questo e’ un parametro a sola scrittura.
INOUT ha le caratteristiche di OUT ma il suo valore iniziale puo’ essere stabilito da chi ha chiamato la procedura , questo e’ un parametro sia in lettura che in scrittura.

Inoltre deve essere specificato il tipo di parametro (VARCHAR , INT o altro).

Es:
CREATE PROCEDURE getNumAnnunciUser (IN user VARCHAR(200) , OUT numAnnunci INT)

Ora non ci rimane altro che definire il corpo della procedura che sara’ compreso tra

BEGIN
[corpo.....]
END

Es:

BEGIN
#corpo della procedura
SELECT COUNT (*) INTO numAnnunci
FROM tabella_annunci
WHERE user_owner = user;
END

La procedura creata verra’ memorizzata nella tabella ROUTINES del database information_schema .

per poterla chiamare viene utilizzata la sintassi:

CALL getNumAnnunciUser(‘papero’, @iOutParam);
SELECT @iOutParam;

CALL chiama la funzione , il simbolo ‘@’ definisce un paramentro che in questo caso avra’ valore NULL mentre SELECT ottiene il valore del paramentro modificato dalla routine.

Se il secondo paramentro fosse stato di tipo INOUT potevamo passargli un valore attraverso
SET @nomeParamInOut = ‘valore’.

Lascia un commento