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.