Accesso non consentito - Registrati per continuare

Il comando DELIMITER

Ultima revisione a cura di Sante Caserio, 08 Febbraio, 2010 00:15

Quando si lavora con MySQL, la libreria client esegue un parsing preliminare delle istruzioni prima di inviarle al server. Per libreria si intende la MySQL Client Library, che è utilizzata sia dal client da riga di comando mysql, sia da tutte le API utilizzate per scrivere programmi e script che lavorino con MySQL.

Va da sè che necessario che la libreria sia in grado di comprendere quando un’istruzione è terminata e ne inizia un’altra. Per capirlo si basa sui delimitatori: una istruzione è delimitata dal catattere speciale GO (’\g’) o dal punto e virgola (’;’).

Il problema si presenta quando creiamo uno stored program (Stored Procedure, Trigger, Evento) composto da più istruzioni. Infatti per crearlo o per modificarlo useremo un comando CREATE, che conterrà una serie di istruzioni che vanno a costituirne il corpo; queste istruzioni saranno separate da un delimitatore e se questo fosse il punto e virgola il client interpreterebbe questo carattere come “fine dell’istruzione CREATE”.

E’ dunque necessario cambiare temporaneamente il delimitatore tramite il comando DELIMITER. La sua sintassi è questa:

1 DELIMITER nuovo_delimitatore

E’ importante evitare il punto e virgola!

Il nuovo delimitatore può essere una qualunque sequenza di caratteri che ci risulti utile o gradevole. Per convenzione si tende a usare un doppio slash (’//’), ma non è obbligatorio. Dopo l’istruzione CREATE o ALTER si utilizzerà il denominatore per indicare che l’istruzione è terminata. Subito dopo bisogna ricordarsi di ripristinare il delimitatore di default, cioè il punto e virgola. Ma vediamo un esempio:

1 DELIMITER //
2 CREATE PROCEDURE miaProdedura() RETURNS VARCHAR(12)
3 BEGIN
4     DECLARE saluto VARCHAR(12);
5     SELECT 'Hello World!' INTO saluto;
6     RETURN saluto;
7 END //
8 DELIMITER ;

Siccome DELIMITER è un comando client che non viene inviato al server non è una parola riservata.