I delimitatori nel client mysql
Il delimitatore predefinito, nel client mysql, è il punto e virgola.
Quando si creano degli stored program dalla riga di comando, di solito è necessario differenziare il normale delimitatore dal delimitatore usato all'interno di un blocco BEGIN END.
Si consideri l'esempio seguente:
CREATE FUNCTION QuarantaDue() RETURNS TINYINT DETERMINISTIC BEGIN DECLARE x TINYINT; SET x = 42; RETURN x; END;
Se si inserisce questo codice riga per riga, il client mysql considera il primo punto e virgola, alla fine della riga DECLARE x TINYINT
, la fine dell'istruzione. In questo modo ottiene solo una definizione parziale, perciò risponde con un errore di sintassi:
MariaDB [test]> CREATE FUNCTION QuarantaDue() RETURNS TINYINT DETERMINISTIC -> BEGIN -> DECLARE x TINYINT; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 3
La soluzione è specificare temporaneamente un delimitatore diverso, utilizzando il comando DELIMITER. Il delimitatore può essere composto da un insieme di caratteri a scelta, ma deve essere ben distinto per non creare ulteriore confusione. //
è una scelta piuttosto comune, utilizzata anche nella KnowledgeBase.
Ecco come inserire correttamente la funzione nel client mysql con il nuovo delimitatore.
DELIMITER // CREATE FUNCTION FortyTwo() RETURNS TINYINT DETERMINISTIC BEGIN DECLARE x TINYINT; SET x = 42; RETURN x; END // DELIMITER ;
Alla fine, si torna a impostare il punto e virgola come delimitatore.