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.

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.