Jun 18 2008

Mysql Stored Routines: Functions & Procedures

Published by Morail at 3:56 pm under Database, Sonet

Con la versione 5.0 di MySQL è stato introdotto il supporto per le stored procedure. Questa lacuna era uno dei maggiori punti di forza dei detrattori di MySQL ed ora che è stata colmata vediamo come andare a sfruttare queste procedure. Ricordio inoltre che per funzionare necessitano della tabella proc nel database mysql creato durante l’installazione.

Le stored procedure in MySQL sono composte da un set di statement SQL che possono essere salvate server-side, in modo che il client per usufruirne debba solo richiamarle fornendo i parametri necessari.
Per essere create, eseguite e modificate necessitano di particolari grant sul database, possono essere trovarti presso il manuale di MySQL.

Una stored routine può richiamarne altre ed essere una function o una procedure. La differenza è che la prima può ritornare uno scalare e può essere richiamata dall’interno di ogni altro statement, mentre la seconda può ritornare valori, anche resultset, solo tramite l’utilizzo di output variables.

Di default una routine è associata al database di default. Per associarla manualmente ad uno specifico db, usare come nome db_name.routine_name.

STORED FUNCTION

La sintassi per creare una stored function è la seguente:

1
2
3
4
5
CREATE
    [DEFINER = { user | CURRENT_USER }]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

Dove i func_parameter sono specificati come param_name type, e routine_body è un qualunque valido statement SQL. Questa può essere uno statement elementare come SELECT o INSERT, oppure uno statement complesso che inizia con BEGIN e termina con un END. Al suo interno possono esserci dichiarazioni (DECLARE), loop o altri statement.
E’ obbligatorio resistuire un valore del tipo specificato dopo il parametro RETURN, e questo non può essere un resultset. Per ritornare questo tipo di valore si ha la necessità di implementare una stored procedure (stando attendi che però in una procedure non va implementata nessuna RETURN, ma vanno utilizzati i parametri)
Altra differenza dalla stored procedure è il fatto che nei parametri non vi è distinzione fra i parametri di input e i parametri di output.

Comandi utili:

1
2
3
CREATE FUNCTION [...]
ALTER FUNCTION [...]
DROP FUNCTION [...]

STORED PROCEDURE

Una procedure in MySQL viene costruita seguendo questa sintassi:

1
2
3
4
CREATE
    [DEFINER = { user | CURRENT_USER }]
    PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

Alcune differenze con le function sono già state spiegate e ora le approfondiamo ulteriormente:

proc_parameter definiti in questo modo:

1
IN | OUT | INOUT param_name type

Infatti sono distinti in parametri di input che vengono processati e parametri di output, restituiti dalla procedure. IN, OUT e INOUT sono keyword e vanno specificate. Ogni procedura può avere uno o più parametri, ciascuno dei quali è formato da un nome, un tipo di dato e l’indicazione se trattasi di parametro di input, di output o entrambi. Se manca l’indicazione, il parametro è considerato di input.
routine_body come detto precedentemente deve essere uno statement SQL valido.

Presento qui sotto un breve esempio di stored procedure:

1
2
3
CREATE PROCEDURE proc_name (IN first_param INT, OUT second_param INT)
SELECT COUNT(*) INTO second_param FROM table
WHERE ex_field = first_param;

Data questa procedure per richiamarla e ottenere il risultato si usano questi comandi:

1
2
CALL proc_name (12, @param);
SELECT @param;

Trackback URI | Comments RSS

Leave a Reply